2012-04-18 5 views
1

В linux весь процесс завершается, когда основной поток завершается независимо от того, как он завершается, функцией exit() или возвращается из main. Если основной поток возвращается из main(), он вернется в «C runtime», известный как crt.o или что-то в этом роде. В crt.o, чей c-код выглядит так: exit (main (argc, argv)); exit() будет вызываться основным потоком
, в результате, все потоки завершаются.В программе c, завершается ли весь процесс, когда основной поток завершается?

Является ли моя мысль правильной?

Если в crt.o exit() заменена функция завершения потока, такая как void thread_exit (int), которая может только завершать поток с статусом выхода, исходный код c crt.o выглядит как thread_exit (main (argc, argv)), выполняются ли другие потоки, когда основной поток завершается?

+0

Кажется, было бы быстрее написать тестовую программу, чтобы рассказать, чем написать вопрос :) – sarnold

+1

@sarnold: Написание тестовой программы редко является правильным способом ответить на такой вопрос. –

ответ

6

Возврат с main эквивалентен вызову exit и завершает процесс . Чтобы завершить только один поток, используйте pthread_exit. Обратите внимание, что для начального потока допустимо, чтобы начальный поток вызывал pthread_exit (и процесс не прерывается до тех пор, пока все потоки не выйдут или пока один из них не вызовет exit), и потоки, отличные от начального потока, неявно вызовут pthread_exit, если вы вернетесь из своих функций запуска.

4

на unix, процесс завершается после того, как последний поток был прерван. Обратите внимание, что это может быть любой поток, а не только «основной» поток. Итак, если вы замените exit pthread_exit, но породили поток перед возвратом в main, ваш процесс не завершится.

+0

exit() не завершает работу всех потоков в процессе? –

+0

@MartinJames OP хочет знать, что произойдет, если мы заменим 'exit()' на 'pthread_exit()' – JosephH

+0

Да, хм .. странная вещь, которую нужно созерцать. –

Смежные вопросы