@WGroleau : каждому свое, а мы должны иметь в виду, что разные дисциплины имеют разные культуры, но в моем мире наигранно включая ошибки и не позволю студенты знают, высокая дорога, чтобы тратить свое время, и крайне неуважительно по отношению к студентам. Слава богу, я не ученый. Не значит, что он должен или не должен извиняться - у нас слишком мало информации, чтобы знать, - но я бы справедливо разъяренные студенты в мою дверь, если я удалю, что нибудь трюк нарочно представляя вопрос с ошибкой. Ночью, Эйфелева башня художественное освещение не обязательно в рамках авторского права, даже если это главная тема картины. С одной стороны, Сосьете д'эксплуатации де ла Тур Эйфель (сете) утверждает, что различные подсветки башни являются торговыми марками, и утверждает, что они находятся под охраной авторского права, но с другой стороны, это доказано в суде только в отношении изображения-проекции освещения, нет нормального освещения в ночное время. Да, я говорю по-французски и я видел освещение. Пожалуйста, не делайте утверждений, которые я составил иски. Я не утверждал, цитирую дословно решение.

На 130 - (128+радиоразведки) вы видите в $? после последней команды умер от радиоразведки-это упрощенное представление ее статус выхода некоторых снарядов, как Баш. Другие снаряды будут использовать различные представления (например, 256+Сигнум в ksh93, 128+256+Сигнум в Яш, текстовое представление, как сигнал SIGINT или на которых он слушал с ниппелем в РК/Эс). Ознакомиться по умолчанию код выхода, когда процесс завершен? для получения более подробной информации по этому.

Процесс может ждать, пока дочерний процесс, и запросить статус:

  • если оно было остановлено (с которой сигнал)
  • если оно было возобновлено
  • если он был убит (с которого сигнал)
  • если он в ловушке (для вызова ptraceпроцессов)
  • если он сбросил ядра
  • если он вышел нормально С для _exit() системного вызова (с которого выход код)

Для этого они используют один из ждать(), с помощью waitpid(), waitid() (см. также устаревшие wait3(), wait4()) или обработчик сигнала sigchld на системный вызов.

Эти системные вызовы возвращают все, что выше информация. (За исключением waitid() на некоторых системах, только самые низкие 8 битов числа, переданного для _exit() для детей, которые заканчиваются, как правило, доступны).

Но в bash (и большинство Борна-как и csh-как ракушки) пачка всю эту информацию в 8 бит количество за $? ($? самые низкие 8 битов кода выхода для процессов, которые обычно завершают, а 128+Сигнум он был убит или отстранен или в ловушке, все остальные данные не доступны). Так что, очевидно, есть некоторая информация теряется. В частности, через $? в одиночку, никто не может сказать, если процесс сделал для _exit(130) или умер от радиоразведки.

Баш знает, когда процесс будет убит явно. Например, когда убивают фоновые процессы, вы видите:

[1]+ прервать сон 20

Но в $?, она не дает вам достаточно информации, чтобы сказать, был ли он убит радиоразведки или называется для _exit(130).

Поскольку большинство снарядов сделать это преобразование, приложений, знать лучше, чем делать для _exit(number_greater_than_127) ни за что, но смерть от сигнала хотя.

Тем не менее, если процесс не для _exit(130), процесс ждет, что процесс будет обнаружить, что этот процесс прекращается, как правило, не в том, что он был убит по сигналу. В C, WIFEXITED() будет возвращать истинным, WIFSIGNALED() будет возвращать false.

Баш сам не буду рассматривать процесс как умер от радиоразведки (хотя это позволяет думаю, что это возможно через $? содержащие такое же значение, как если бы он умер от радиоразведки).

Так, что не вызывают особой обработки сигнала SIGINT, что баш делает. В скрипте, как Баш и текущую команду в скрипт получает сигнал SIGINT при (как они оба в одном процессе группы).

Баш умирает при получении сигнала SIGINT только если команда его ждет тоже умер от радиоразведки (идея в том, что если например в вашем скрипте, вы запускаете VI или меньше, и использовать ^C, чтобы прервать что-то там не делает ви/меньше умирать, ваш скрипт не умирает по возвращении бросить ви/менее позже).

Если эта команда Баш ждет не для _exit(130) в обработчик сигнала SIGINT, Баш не умереть при этом сигнал SIGINT (он не считает себя как будто они были прерваны, потому что он не верит, что ребенок был прерван).

Вот почему, когда вы хотите сообщить о смерти радиоразведки, что вы действительно были прерваны, хотя на самом деле вы делаете некоторую дополнительную обработку после получения этого сигнала в обработчик, вы должны не делать для _exit(130), но на самом деле убить себя с SIGINT (после восстановления по умолчанию обработчик сигнала SIGINT). В оболочке, вот с:

ловушка '
 дополнительной обработки
 ловушка - ИНТ # восстановить обработчик сигнала SIGINT 
 убить -ы ИНТ " отчет$$" # родителю, что мы действительно были
 # прерывается
 'ИНТ