Использование _exit () или exit () после spawn ()? - PullRequest
4 голосов
/ 08 апреля 2011

Как гласит Википедия здесь : "Файлы, которые открываются при вызове spawn , остаются открытыми в дочернем процессе".(очень похоже на exec () )

ОК, ОС сохранила некоторые файлы открытыми и готовыми к нашему недавно появившемуся неизвестному процессу.Предположим, что наш процесс не знает о ранее открытых файлах и, наконец, решает прекратить;в то время как языки программирования, такие как C, требуют некоторой внутренней очистки перед завершением.

мой вопрос: Влияет ли такая очистка на эти открытые файлы каким-либо образом? AFAIK, они нигде не зарегистрированы или находятся внутри самого процесса.

Ответ должен как-то определять поведение программиста при завершении процесса spawn () ed (или даже exec () ed).Может ли процедура полной очистки каким-либо образом навредить родителю?(например, удаляя временные файлы), и поэтому программист не должен использовать _exit () вместо exit () ?

1 Ответ

3 голосов
/ 08 апреля 2011

Краткий ответ: нет .Среда выполнения C не закрывает файловые дескрипторы, открытые при выходе из процесса, поэтому вы можете выйти из родительского или дочернего процесса, не беспокоясь о том, чтобы испортить другой.

kernel - этоотвечает за закрытие дескриптора файла, если на него нет открытых ссылок, что происходит, когда ядро ​​уничтожает процесс.И ядро ​​может справиться с этой ситуацией просто отлично.

...