Почему задания не уничтожаются при выходе из системы при выполнении с “>/dev/null 2> &1 &\”?

Использование процессов сборки программного обеспечения Most make. Удостоверьтесь, что Вы делаете make используйте -j спор с числом обычно о дважды количестве центральных процессоров Вы имеете, таким образом, make -j 8 подходило бы для Вашего случая.

5
15.03.2012, 22:06
2 ответа

Что касается демонов, делающих его, поэтому, они хотят любые выходные сигналы или сообщения об ошибках, которые они могли бы произвести, чтобы быть отброшенными, неважно, как Вы перенаправляете входные и выходные потоки процесса, это все еще будет SIGHUP'd, если это будет присоединено к сессии, и тот сеанс закрыт для отъезда выполнения процессов.

Для отъезда выполнения процессов существует немного подходов:

  1. отсоедините их от сессии — демоны делают это путем разветвления нового процесса и затем выхода из исходного процесса; теперь новый процесс не имеет никакого родителя и принят init можно также выполнить то использование удара, который отрицает внутренняя команда

  2. использовать nohup заблокировать процесс от получения SIGHUP, когда сессия умирает; процесс не получает SIGHUP, не выходит, его родитель умирает, и init принимает его

  3. присоедините его к сессии, которая не умрет — экран использования

Перепроверьте, что Ваша работа над оператором "Задания не уничтожается при выходе из системы при выполнении с > /dev/null 2>&1 &"

3
27.01.2020, 20:42
  • 1
    Это не поведение, которое я вижу на своих машинах CentOS 5.7. Когда я выполняю задания с">/dev/null 2> &1 и" и выход из системы, они не уничтожаются и так или иначе приняты init. Между прочим, я выполняю единственные задания и не задание как Вы описанный в подходе A. –  Luis Fernando Alen 09.03.2012, 06:40
  • 2
    Относительно принятия init когда Вы выходите из системы на Linux, по моему опыту, это - функция удара, не обязательно для защиты сигналов зависания как nohup делает. –  Sergio 14.03.2012, 01:14
  • 3
    Sergio, если это - функция удара, почему задания уничтожаются, когда Вы выходите из системы, не перенаправляя потоки и противоположное, не происходит, когда Вы делаете это? Это - то, что я не получаю... Тем не менее, это могло бы иметь смысл. Кажется, что на AIX, который сделал, чтобы Korn окружили как его значение по умолчанию, задания уничтожаются, когда Вы выходите из системы, неважно, как Вы перенаправляете потоки. –  Luis Fernando Alen 14.03.2012, 03:51
  • 4
    Процессы приняты init, когда их родитель умирает. –  Patrick 14.03.2012, 05:40
  • 5
    @LuisFernandoAlen, что описал человек числа, корректен. Существует что-то еще неправильно с Вашим тестом. Ваш job.sh очевидно, делает что-то сложное. Я предлагаю, чтобы Вы восстановили свой тест с основным сценарием как while true; do sleep 1; done. Это будет работать превосходное. –  Patrick 14.03.2012, 05:52

Это - поведение заданий на ударе насколько я знаю, я сделал тест здесь, и это продолжало бежать с теми потоками, открытыми также:

sergiopa@sergiopa:~/Downloads$ find / -print >/dev/null 2>&1 &
[1] 14152
sergiopa@sergiopa:~/Downloads$ jobs
[1]+  Running                 find / -print > /dev/null 2>&1 &
sergiopa@sergiopa:~/Downloads$ ps -ef | grep find
sergiopa 14152 13913 10 15:47 pts/18   00:00:01 find / -print
sergiopa 14195 13913  0 15:48 pts/18   00:00:00 grep --color=auto find
sergiopa@sergiopa:~/Downloads$ 

sergiopa@sergiopa:~/Downloads$ lsof -c find
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
find    14152 sergiopa  cwd    DIR  252,1     4096     4808 /usr/src/linux-headers-2.6.35-22/drivers/rapidio
find    14152 sergiopa  rtd    DIR  252,1     4096        2 /
find    14152 sergiopa  txt    REG  252,1   141980   391686 /usr/bin/find
find    14152 sergiopa  mem    REG  252,1  1421892    26489 /lib/libc-2.12.1.so
find    14152 sergiopa  mem    REG  252,1   118084    26452 /lib/ld-2.12.1.so
find    14152 sergiopa  mem    REG  252,1   149392    26485 /lib/libm-2.12.1.so
find    14152 sergiopa  mem    REG  252,1    30684    26469 /lib/librt-2.12.1.so
find    14152 sergiopa  mem    REG  252,1   121578    26490 /lib/libpthread-2.12.1.so
find    14152 sergiopa  mem    REG  252,1  2768240   391861 /usr/lib/locale/locale-archive
find    14152 sergiopa    0u   CHR 136,18      0t0       21 /dev/pts/18 <<<<
find    14152 sergiopa    1w   CHR    1,3      0t0     4293 /dev/null   <<<<
find    14152 sergiopa    2w   CHR    1,3      0t0     4293 /dev/null   <<<<
find    14152 sergiopa    3r   DIR  252,3     4096 16777344 /home/sergiopa/Downloads
find    14152 sergiopa    4r   DIR  252,3     4096 16777344 /home/sergiopa/Downloads
find    14152 sergiopa    5r   DIR  252,1     4096     4808 /usr/src/linux-headers-2.6.35-22/drivers/rapidio
sergiopa@sergiopa:~/Downloads$ 

Посмотрите строки с' <<<<', это - STDIN, STDOUT и STDERR. Закрытый оболочка, но находка все еще работает.

0
27.01.2020, 20:42

Теги

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