Что такое сигнал 0 в команде прерывания?

Это зависит от того, под чем Вы подразумеваете "сгенерированный пользователями". Большая часть конфигурации, которую Вы будете иметь, о сервисах/демонах и приложениях, работающих на Вашей системе. Большинство из них помещает их конфигурацию в / и т.д. Основанные на пользователе приложения имеют свою конфигурацию в Вашем корневом каталоге (обычно в каталоге приложения). Но у Вас могут быть некоторые приложения, которые также хранят их данные в/var/lib или/var/spool.

Так ответ: "это зависит от того, что Вы работаете на своей машине".

12
24.07.2011, 17:01
3 ответа

Из руководства удара:

trap [-lp] [[arg] sigspec ...]

... Если sigspec является ВЫХОДОМ (0), аргумент команды выполняется на выходе от оболочки.

19
27.01.2020, 19:55
  • 1
    Корректный. В случае, если читатель приехал сюда из-за заголовка вопроса, обратите внимание, что это - значение 0 в оболочке trap команда. При отправке сигнала с kill, количество сигнала 0 средств не отправить сигнал, в конце концов; это - способ протестировать существование целевого процесса. –  Gilles 'SO- stop being evil' 24.07.2011, 17:00
  • 2
    @Mat:Большое спасибо. я читал человека 1 прерывание... –  Christoph Wurm 24.07.2011, 17:30
  • 3
    Но это не находится в списке, произведенном trap -l! –  amphetamachine 25.07.2011, 11:59

ловушка на 0 запускается при выходе оболочки. Обычно он используется для очистки tmp файлов в одном месте, которое всегда выполняется:

tmp=/tmp/myscript.$$

trap 'rm -f $tmp; exit' 0 1 2 15

do_a_bunch_of_stuff

exit

выход в конце ловушки выходит из оболочки при очистке с правильным статусом.

0
27.01.2020, 19:55

Как показывает @Mat в своем ответе, при использовании СИГСПЕКА 0 в команде trap при выходе из скрипта команда trap будет запущена.

Этот пример иллюстрирует, что произойдет.

$ cat tr.bash 
#!/bin/bash

echo "PID: $$"

trap 'echo hi; exit 1' 0 1 2 15

while [ 1 ]; do
    sleep 3
done

Когда мы выполняем это:

$ ./tr.bash 
PID: 24086

, он сидит здесь и ждет неограниченное количество времени. В другом окне, если мы сейчас отправим сигналы kill, вы увидите, что kill -0 не убьет процесс, даже если сигнал 0 перечислен в команде trap.

$ kill -0 $(pgrep tr.bash)
$

Однако, если мы убьем скрипт, используя сигнал 1, убьем -1:

$ kill -1 $(pgrep tr.bash)
$

Мы увидим, что скрипт выходит, и распечатаем сообщение "привет" 2 раза. Первое для сигнала 1, а второе потому, что скрипт завершил работу.

$ ./tr.bash 
PID: 24086
hi
hi
1
27.01.2020, 19:55

Теги

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