LINUX.ORG.RU

Child process exited normally with status = 0


0

0

Добрый день! Друзья! Не подскажете, при каких условиях ОС Linux может принять решение о корректном завершении процесса (в моем случае дочернего) без отправления сигнала. В принципе-то проблема вот в чем. В логах программного модуля вижу следующую запись: MainStub.cxx(255) Child process exited normally with status = 0 Пытаюсь выяснить, чем может быть вызвано такое поведение программного модуля. Пробовала отпрвлять программному модулю (процессу) всевозможные сигналы (killall -[численное значение сигнала] [имя процесса]), но не добилась появления в логах описанной выше записи. В связи с чем, пришла к выводу, что причиной завершения дочернего процесса является не посылка сигнала.


Добрый день! Друзья!

Masha

Парень, спросил бы ты нормально.

anonymous ()

>В связи с чем, пришла к выводу, что причиной завершения дочернего процесса является не посылка сигнала.

Не обязательно.
Процесс может обработать сигнал (например SIGTERM) и решить вызвать exit(0).
С точки зрения парента эта ситуация не отличима от той, когда процессу вообще не посылался сигнал.

Почитай ман на waitpid (особенно про W* макросы, так как они позволяют судить паренту о том что произошло с дочерним процессом).

Krivenok_Dmitry ()
Ответ на: комментарий от Krivenok_Dmitry

Спасибо!То есть завершение процесса без посылки сигнала в Linux возможно? где можно почитать при каких условиях система завершает процесс таким образом(не посылая сигналов) Я что-то не могу найти...

Masha ()

> при каких условиях ОС Linux может принять решение о корректном завершении процесса (в моем случае дочернего) без отправления сигнала

int main (int argc, char *argv[]) {
    return 0;
}
yoghurt ★★★★★ ()
Ответ на: комментарий от Masha

В память приходят следующие случаи:
1) Вызов return из функции main
2) Явный вызов exit
3) Прием SIGKILL (который нельзя перехватить или игнорировать) неизбежно приведет к завершению процесса (если он только не в UNINTERUPTABLE_SLEEP).
4) Прием сигнала, для которого обработчик не определен, а дефалтовое действие - завершение процесса.

Я бы советовал почитать Стивенса если нужно про process management в целом и маны на конкретную систему если нужны детали.

Krivenok_Dmitry ()
Ответ на: комментарий от Krivenok_Dmitry

Спасибо! 1)Вызов return из функции main 2)Явный вызов exit Здесь,как я понимаю, речь идет о завершении процесса, инициированном пользователем. А меня интересует,когда система сама может завершаеть процесс(решить, что данный процесс необходимо завершить), причем не отправляя сигналов,и возможно ли такое вообще...

3)Прием SIGKILL (который нельзя перехватить или игнорировать) неизбежно приведет к завершению процесса (если он только не в UNINTERUPTABLE_SLEEP). 4) Прием сигнала, для которого обработчик не определен, а дефалтовое действие - завершение процесса. Я пробовала отправлять сигналы моему программному модулю(процессу), для которых обработчик не определен, а дефалтовое действие - завершение процесса(честно говоря пробововала отправлять все сигналы,кроме сигналов реального времени),но записи: MainStub.cxx(255) Child process exited normally with status = 0 в логах не наблюдала...

Masha ()
Ответ на: комментарий от yoghurt

То есть в общем-то мне необходимо ответить на следующий вопрос: каким образом ОС Linux (возможно более правильным будет сказать ядро Linux) может завершить процесс? Я знаю только один способ - отправить сигнал. А вот есть ли еще какие-то способы и когда они возникают, сказать затрудняюсь...

Masha ()
Ответ на: комментарий от Masha

> каким образом ОС Linux (возможно более правильным будет сказать ядро Linux) может завершить процесс? Я знаю только один способ - отправить сигнал. А вот есть ли еще какие-то способы

Нет, нету. Да, процесс сам где-то делает exit(0).

anonymous ()
Ответ на: комментарий от anonymous

Спасибо большое!Буду думать в этом направлении. Может, Вы сможете посоветовать литературу. Изучая этот вопрос, я не находила подтверждения,что Linux может завершать процесс, не отправляя сигнала, но и опровержения тоже не встретила...

Masha ()
Ответ на: комментарий от Boy_from_Jungle

Возможно,но самое интересное, что одни пользователи Linux(я говорю о более продвинутых пользователях, не таких, кая я) говорят, что Linux может заершить процесс,не отправляя сигнал, а другие, что если система сама решает завершить процесс, то обязательно отправляет сигнал...Вот хочется получить точный ответ на этот вопрос. Будем искать!:)

Masha ()
Ответ на: комментарий от Viglim

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

Masha ()
Ответ на: комментарий от Masha

Появились мысли насчет нулевого сигнала...Читаю в одной из книжек: некоторые системные вызовы(например kill()) применяют 0 в особых случаях...не подскажете в каких?Может,это как раз мой случай?:)

Masha ()
Ответ на: комментарий от Masha

«Этим сигналам назначены номера с 1 до 31 (номер 0, так называемый null-сигнал имеет особый смысл).„Нигде не могу найти про этот осбый смысл...

Masha ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.