LINUX.ORG.RU

Не завершаются некоторые процессы


0

1

При автоматизации смены обоев имею некоторые регулярно выполняющиеся скрипты. Эти скрипты свою функцию выполняют, но, по завершении своей работы, не исчезают из диспетчера задач, и killall на них не действует. То есть, в процессе работы, запустив эти скрипты некоторое количество раз, в диспетчере имею неубиваемую пачку экземпляров этих скриптов. Что я делаю не так?

Выкладываю lwallpaper.sh:

#!/bin/bash

if [ $((`xdotool getmouselocation  | grep 'x:' | awk -F' ' '{print $1}' |  awk -F':' '{print $2}'`)) -lt 1280 ]
then
        wname=`cat /home/$USER/tmp/wallname | head -n 1 | awk -F' ' '{print $2}'`
else
        wname=`cat /home/$USER/tmp/wallname | head -n 1 | awk -F' ' '{print $1}'`
fi

if [[ $1 != "-r" ]]

then

        if [[ $wname != "/home/$USER/Pictures/wallpapers/favorities"* ]]
        then
                mv $wname /home/$USER/Pictures/wallpapers/favorities
                echo $wname >> /home/$USER/Pictures/wallpapers/remove.txt
        fi
else

        rm $wname

        if [[ $wname != "/home/$USER/Pictures/wallpapers/favorities"* ]]
        then
                echo $wname >> /home/$USER/Pictures/wallpapers/remove.txt
        fi
fi

/home/$USER/myscripts/wallpaper.sh &

И вызываемый из-под него wallpaper.sh (он ежеминутно выполняется по cron, но в этом случае в процессах не виснет, виснут только экземпляры, запускаемые из lwallpaper.sh):

#!/bin/bash

wallname1=$(find /home/piyavking/Pictures/wallpapers -type f -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' | shuf -n 1)
wallname2=$(find /home/piyavking/Pictures/wallpapers -type f -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' | shuf -n 1)
feh --bg-fill $wallname1 $wallname2 &
echo $wallname1' '$wallname2 > ~/tmp/wallname &

Также стоит отметить, что одновременно с возникновением проблемы в каталоге с этими скриптами стали болтаться файлы '.wallpaper.sh.swp' и '.lwallpaper.sh.swp'. Они, как понимаю, сигнализирут о занятости моих скриптов какими-то процессами. Но вот какими, и что с этим делать, я уже не понимаю.

Спасибо за внимание.

Скорее всего, ничего не виснет, просто ты создаёшь зомби. Что неудивительно со стольким количеством амперсандов. Убери хотя бы тот, что в последней строке lwallpaper.sh.

anonymous ()
Ответ на: комментарий от anonymous

Убрал везде амперсанды - не помогло. Причём wallpaper.sh, запускаемый руками, тоже продолжает виснуть в системном мониторе.

piyavking ★★★ ()
Ответ на: комментарий от anonymous

про зомби-процессы, ps -lax, и PPID нагуглил, при убийстве родителя происходит разлогинивание. Можно ли как-нибудь менее жёстко бороться с проблемкой?

piyavking ★★★ ()
Ответ на: комментарий от piyavking

Вставь в начало каждого скрипта set -x - это включит трассировку выполнения, и сможешь разобраться, на чём происходит затык.

Вывод ps -eF тоже не помешает.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.