Почему фоновые процессы Unix иногда умирают, когда я выхожу из своей оболочки?

В старину, где RAM была ограничена, сам изменяющий код использовался для сохранения памяти. В наше время, например, утилиты сжатия приложения как UPX используются для распаковывания/изменения собственного кода после загрузки сжатого изображения приложения.

12
задан brianegge 23 September 2009 в 04:42
поделиться

3 ответа

Разница здесь действительно в промежуточном процессе. Когда вы закрываете окно терминала, сигнал HUP (связанный с «nohup», как упоминалось в an0nymo0usc0ward) отправляется процессам, работающим в нем. Действие по умолчанию при получении HUP - умереть - из справочной страницы signal (3),

 No    Name         Default Action       Description
 1     SIGHUP       terminate process    terminal line hangup

В вашем первом примере процесс сна напрямую получает этот сигнал HUP и умирает, потому что он не настроен делать что-либо еще. (Некоторые процессы перехватывают HUP и используют его для выполнения некоторых действий, например, перечитывания некоторых файлов конфигурации)

Во втором примере процесс оболочки, выполняющий ваш сценарий оболочки, уже умер, поэтому процесс сна никогда не получает сигнал. В UNIX каждый процесс должен иметь родительский процесс из-за того, как работает семейство вызовов wait (2) и процессы в целом. Поэтому, когда родительский процесс умирает, ядро ​​передает его init (pid 1, как вы заметили) в качестве приемного ребенка. Сиротский процесс (в Википедии) имеет дополнительную информацию о нем, также см. Зомби-процесс для некоторых дополнительных технических деталей.

20
ответ дан 2 December 2019 в 04:53
поделиться

Попробуйте "nohup cmd args ..."

3
ответ дан 2 December 2019 в 04:53
поделиться

Пока транзакция полностью автономна в блоке using (), вы готовы к работе. Однако проблемы могут возникнуть и возникают, если кому-то передан существующий объект транзакции от вызывающего абонента. Но это другой сценарий...

-121--1500719-

Предположим, что раскрывающийся список:

<asp:DropDownList runat="server" id="ddl">
<asp:ListItem Value="0" text="Select a Value">
....
</asp:DropDownList>

У вас есть два способа:

<asp:RequiredFieldValidator ID="re1" runat="Server" InitialValue="0"....

второй способ - использовать средство проверки сравнения:

<asp:CompareValidator ID="re1" runat="Server" ValueToComare="0" ConroltoCompare="ddl" Operator="Equel"....
-121--943595-

Уже запущенный процесс?

^ z
bg
откреститься от% < jobid >

Новый процесс/сценарий (на консоли локального компьютера)?

Не hup script.sh &

Новый процесс/сценарий (на консоли удаленного компьютера)?

В зависимости от вашей потребности,
существует два варианта [будет больше; -)]

ssh remothost 'nohup/path/to/script.sh > nohup.out 2 > & 1 &'

ИЛИ

используйте 'screen'

8
ответ дан 2 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

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