Почему процесс убит с помощью nohup

Возможно, вы исчерпаете пространство среды огромным количеством файлов, позволяющих расширению имени файла выполнять свою работу (особенно в некоторых системах UNIX). По этой причине я бы использовал 'find' для определения файлы, которые вы хотите удалить.

Чтобы увидеть файлы, которые будут удалены, вы можете запустить:

find $(find /specified/directory -d -name "[0-9][0-9][0-9][0-9]") -name "[E|P]*" -print 

, чтобы удалить их, вы можете расширить это с помощью опции -exec

find $(find /specified/directory -d -name "[0-9][0-9][0-9][0-9]") -name "[E|P]*" -exec rm -i {} \;
5
29.05.2018, 10:46
1 ответ

Насколько я знаю, есть две ситуации, которые могут привести к завершению процесса после того, как он был защищен nohup, и каждая ситуация имеет свой обходной путь.

Одна возможность, которая здесь не имеет место, заключается в том, что система использует systemd, где logind.confнастроен с KillUserProcesses=yes. В этом случае закрытие терминала не вызовет проблем, а вот выход из системы будет. Обходной путь в этом случае — использовать

$ systemd-run --scope --user [command]

По сути, это просто сообщает systemd, что он не должен убивать процесс.

Другая возможность заключается в том, что порожденный процесс реализует свой собственный обработчик для SIGHUP, который отменяет защиту nohup. В этом случае проблемы возникнут, как только оболочка будет закрыта, даже если вы остаетесь в системе. Вы можете проверить это с помощью:

$ nohup [command] &
$ grep Sig /proc/$!/status

Вы должны увидеть строку

SigIgn: 0000000000000001

(или любая другая строка шестнадцатеричных цифр ). SIGHUP— это номер сигнала 1, поэтому, если это большое -шестнадцатеричное число с порядком байтов имеет первый (наименьший -значащий )бит, установленный (, то есть последняя цифра — одна из 1, 3, 5, 7, 9, B, D или F ), то SIGHUPигнорируется. В противном случае программа установила собственный обработчик, перекрывающий защиту nohup.

В этом случае решение состоит в использованииdisown:

nohup [command] & disown

Это удаляет процесс из списка заданий оболочки, предотвращая отправку SIGHUPв первую очередь.

24
27.01.2020, 20:33

Теги

Похожие вопросы