pkill
то, что я рекомендую, если это доступно (Linux, FreeBSD, NetBSD, OpenBSD, Солярис). Можно указать процессы названием команды полной командной строкой или другими критериями. Например, pkill vi
закрывает все программы, название команды которых содержит подстроку vi
. Уничтожить только названные процессы vi
, использовать pkill -x vi
. Уничтожить только названные процессы vi
с последним аргументом, заканчивающимся в .conf
, использовать pkill -fx 'vi.*\.conf'
.
Видеть список PIDs это pkill
отправил бы сигнал в, использовать pgrep
, который имеет точно тот же синтаксис за исключением того, что он не принимает имя сигнала или число. Для наблюдения большей информации об этих процессах работать
ps -p "$(pgrep …)"
В соответствии с Linux, Вам нужно ps -p $(pgrep -d, …)
вместо этого (это - ошибка: Linux ps
не совместимо POSIX).
Другим распространенным способом определить процессы для уничтожения являются процессы, которые имеют определенный открытый файл (который может быть исполняемым файлом процесса). Можно перечислить их с fuser
; использовать fuser -k
отправить им сигнал. Например, fuser -k /usr/bin/find
уничтожает все рабочие экземпляры find
.
Если существует безудержный процесс, который продолжает разветвляться, Вы, возможно, должны уничтожить целую группу процесса сразу. Группа процесса определяется отрицанием ее лидера, который является процессом предка всех процессов в группе. Видеть группу процесса, что процесс принадлежит, выполненный ps -o pgid
(плюс любая опция выбрать, который процесс (процессы) отобразиться). Если Вы решаете, что хотите уничтожить лидера группы процесса 1234 и все его дети, работать kill -1234
или kill -HUP -1234
или любой другой сигнал.
Если Вы не можете найти лучший путь, использовать ps
с надлежащими опциями перечислить все процессы и отфильтровать его с grep
или некоторая другая текстовая команда фильтрации. Заботьтесь для не случайного соответствия другим процессам, которые, оказывается, выполняют команду с аналогичным именем, или с аргументом, который содержит то имя. Например:
kill $(ps -o pid -o comm | awk '$2 == "vi" {print $1}')
Помните что Ваш grep
или awk
сама команда может быть перечислена в ps
вывод (ps
и команда фильтрации запускается параллельно, поэтому обнаружится ли она или не зависит от синхронизации). Это особенно важно, если аргументы команды включены в ps
вывод.
Если Вы хотите, чтобы команда была выполнена во время начальной загрузки, можно поместить ее в crontab с @reboot
вместо времени. Таким образом выполненный crontab
и добавьте строку как
@reboot byobu -S boot-time mycommand
Вместо того, чтобы поместить команду на командную строку byobu
, можно поместить его в файл сессии Byobu.
Если Вы хотите, чтобы сессия была выполнена как корень, можно запустить его с /etc/rc.local
вместо crontab корня. Обязательно запустите его в фоновом режиме, так как начальная загрузка не завершена до /etc/rc.local
закончил работать.
byobu -S boot-time mycommand &
Теперь byobu основан на tmux, проще всего напрямую использовать tmux .
в моем случае я использую следующий синтаксис:
tmux new -d -s session-name /path/to/my/Script.sh
и подключаюсь к нему, который я использую:
tmux session has -t-name
в вашем crontab вам нужно будет ввести:
@reboot tmux new -d -s session-name /path/to/my/Script.sh