我有一个进程,它创建了一个pthread,但是这个线程没有加入主线程。这个线程有一个无限循环。当进程启动时,这个线程也会启动,但如果使用SIGKILL杀死进程,这个线程会被自动杀死还是会变成僵尸线程?
谢谢,
罗希特夏尔
答案 0 :(得分:1)
SIGKILL
信号强制终止整个进程,无论它有多少线程以及这些线程正在做什么。此信号无法捕获或忽略。
如果进程的父进程仍然存在,则进程将处于僵尸状态,直到父进程调用wait
或其变体。
答案 1 :(得分:0)
任何进程都不能忽略/处理SIGKILL。 当主线程返回时,它终止整个进程。这包括流程中的所有其他线程。当您从任何线程调用exit时,会发生同样的事情。
对于Linux,没有这样的"显式"进程和线程之间的区别。
它们中的每一个都由内核中的task_struct
表示,它们被链接在一起。
每个进程主线程都有一个pid和任务组id(tgid)。因此,所有线程也有相同的pid或tgid。
清理流程后,只需清除child processes,not threads are reparented
。
更多关于语义:
一个线程与它的父级共享它的资源,这基本上意味着内存映射,文件描述符等。
当进程本身不存在时,谁将与?
共享资源的线程你不能将它们重新表达到其他过程,因为它们需要获取它的资源。
因此,简而言之,子进程可以被重新分配,因为它没有 共享任何资源,因为子线程不能被重新分配
如果你想深入挖掘,你可以从这里开始: makelinux