Chinaunix

标题: linux 下多线程的问题 [打印本页]

作者: JavaAnd    时间: 2009-07-27 18:09
标题: linux 下多线程的问题
线程库用的是LinuxThread
程序只有一个进程,此进程里面有好几十个线程,现在发现只要执行kill 某一线程后整个进程都kill掉了,谁都告诉下原因呀?
作者: kouu    时间: 2009-07-27 20:58
标题: 回复 #1 JavaAnd 的帖子
linuxthreads里面有个叫管理线程的东西, 它是所有线程的父亲. 某个线程被杀死后, 管理线程将收到SIGCHLD信号, 然后它会把所有线程杀死, 然后自尽.
作者: dozec    时间: 2009-07-27 21:55
原帖由 kouu 于 2009-7-27 20:58 发表
linuxthreads里面有个叫管理线程的东西, 它是所有线程的父亲. 某个线程被杀死后, 管理线程将收到SIGCHLD信号, 然后它会把所有线程杀死, 然后自尽.

误人子弟。
一句话:每个线程有自己的信号掩码,有自己的未决信号集,但每个线程却共享进程的信号处置方式。kill() to a process or pthread_kill() to a thread时,只要接收信号进程对此信号的处置方式导致进程终止(大多数信号的默认动作),进程就会终止。
作者: kouu    时间: 2009-07-27 23:05
标题: 回复 #3 dozec 的帖子
误人子弟? 我建议老兄你先弄清楚什么是linuxthreads,什么是NPTL,什么是pthread…… 这些东西实际上是不一样的。

[ 本帖最后由 kouu 于 2009-7-27 23:10 编辑 ]
作者: dozec    时间: 2009-07-27 23:22
原帖由 kouu 于 2009-7-27 23:05 发表
误人子弟? 我建议老兄你先弄清楚什么是linuxthreads,什么是NPTL,什么是pthread…… 这些东西实际上是不一样的。



对不起,你说的对。
作者: shuchi91    时间: 2009-07-28 10:30
标题: 回复 #1 JavaAnd 的帖子
应该是所有的线程共享信号,收到kill的时候,就KILL所有线程了吧。
可以用一个变量,子线程去监听,然后自行退出,不知我的理解是否正常。
作者: JavaAnd    时间: 2009-08-19 12:45
谢谢上面两位的回复,好久没上来了,那么这样说我就没有办法杀死单个线程?
现在又碰到一个问题,在程序中用Kill 发9的命令到某一线程,此时整个程序全部被Kill,但是如果用kill 发
15的信号则可以结束单个线程,一直不明白是什么原因,以前我一直认为,发送9的信号,一个进程中的所有线程都会收到所以就全部挂掉了,但是发15的命令也应该是这个结果啊?
作者: vbs100    时间: 2009-08-19 12:49
LinuxThread 更像是多进程 早就不用了 升级下 glibc吧
作者: JavaAnd    时间: 2009-08-19 15:42
标题: 回复 #8 vbs100 的帖子
有些东西不能说自己想升就升的呵呵




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2