2015-10-28 2 views
2

У меня есть процесс, он создает pthread, но этот поток не связан с основной нитью. Этот поток имеет бесконечный цикл. Когда процесс запускается, этот поток также запускается, но если процесс будет убит с помощью SIGKILL, будет ли этот поток убит автоматически или он превратится в поток зомби?поведение нити, когда соединение не подключено, и основной процесс убит

Спасибо,

Рохит

ответ

1

Сигнал SIGKILL принудительно завершает весь процесс, независимо от того, сколько нитей имеет и то, что те нити делают. Этот сигнал нельзя поймать или проигнорировать.

Если родитель процесса все еще жив, когда это произойдет, процесс будет находиться в состоянии зомби, пока родительский процесс не вызовет wait или его варианты.

+0

если процесс А (ИДП-1234) начинает потоковый РОТ [РОТ работает бесконечный цикл], и мы выдаем SIGKILL А (PId- 1234), также остановлен/убит ptA? – user1254554

+1

@ user1254554 Да, если процесс убит, все потоки в этом процессе будут убиты. Нить не может существовать без процесса. – dbush

0

SIGKILL нельзя игнорировать/обрабатывать любым процессом. Когда основной поток возвращается, он завершает весь процесс. Это включает все другие потоки в процессе. То же самое происходит, когда вы вызываете выход из любого потока.

В Linux нет такой «явной» разницы между процессом и потоком. Каждый из них представлен task_struct в ядре, и они соединены вместе.

Каждый основной поток процесса имеет идентификатор pid и группы задач (tgid). Таким образом, все потоки также имеют одинаковые pid или tgid.

Когда процесс очищается, все это child processes,not threads are reparented.

Это больше о семантике:

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

Когда сам процесс не существует, кто нити собираются поделиться ресурсами с помощью?

Вы не можете отследить их до какого-либо другого процесса, так как им нужно будет использовать его ресурсы.

Так, короче говоря, Дочерний процесс может быть предок, так как он не акций каких-либо ресурсов, где, как дочерний поток не может быть предком

.

Если вы хотите копать глубже, вы можете начать здесь: makelinux

+0

"* То же самое происходит, когда вы вызываете выход из основного потока. *" На самом деле процесс заканчивается при вызове 'exit()' from * any * thread. – alk

+0

изменено соответственно :) – basav

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