процессы в LInux - PullRequest
       4

процессы в LInux

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

у всех есть вопросы по программам: если у меня есть, например, какая-то программа:

int main()
{
int value = 0;
...
return value;
}

моя ОС создает новый процесс, который использует execv () для запуска этой программы, когда я return valueЯ перенесу значение обратно в процесс, мой вопрос, как этот процесс закончится?выполняет ли выход (значение), когда значение является значением из моей программы?заранее спасибо за любую помощь

Ответы [ 3 ]

7 голосов
/ 06 апреля 2011

Возвращение с main() в основном эквивалентно вызову exit() и запускает процедуру Нормальное завершение .

Нормальное завершение вызывает следующие действия:

  1. Функции, которые были зарегистрированы с помощью функций atexit или on_exit, вызываются в обратном порядке их регистрации.Этот механизм позволяет вашему приложению указывать свои собственные действия по «очистке», которые будут выполняться при завершении программы.Обычно это используется для сохранения информации о состоянии программы в файле или разблокировки блокировок в общих базах данных.

  2. Все открытые потоки закрываются, записывая любые буферизованные выходные данные.Кроме того, удаляются временные файлы, открываемые с помощью функции tmpfile. Вызывается

  3. _exit(), завершая работу программы.

Наконец,система выполняет обычную очистку после завершения процесса (файлы закрыты, сообщен код завершения, обработан дочерний процесс, прерван или переназначен на init ...) См. Внутренние элементы завершения

2 голосов
/ 06 апреля 2011

Новый процесс, созданный для вызова execve() , - это процесс, который выполняет ваш код. execve() заменяет образ вызывающего исполняемого файла новым исполняемым образом - успешный вызов execve() никогда не возвращается.

Итак, ваш код не возвращает значение этому процессу - он возвращает значение родительскому процессу, который вызвал fork(), чтобы создать дочерний элемент с именем execve(). Если этот родительский процесс еще не запущен, возвращаемое значение передается процессу init (PID 1).

0 голосов
/ 06 апреля 2011

Когда выполняется main, создается новый процесс с родителем в качестве init.при выполнении возврата основной процесс завершает работу и отправляет статус (значение) возврата процессу init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...