主进程被kill或者错误退出,子线程还在跑怎么处理


主进程被kill或者异常退出,子线程还在跑怎么办
我是在linux下gcc,

主要是socket服务,

开启了几个线程,今天偶然发现,虽然我已经killall了,但是其中一个日志文件仍然在不停收到写入的日志,

另外,我的主进程是fork出来的,这样他就在后台运行了,即使我退出了ssh,同样可以运行,

我刚才试着用
signal(SIGKILL,sk);
signal(SIGINT, sk);

但是似乎没有收到这样的信号!

每个线程一开始我都:

pthreaddetach(pthreadself());

了的

c语言 基本概念 程序开发

经典的KOF 11 years, 4 months ago


<fieldset> <legend> 探讨 </legend>
用ps --ppid 父进程id jf
列出子进程id,然后再杀子进程呗。
</fieldset>


世界D末日 answered 11 years, 4 months ago


demon进程

糸色望小生 answered 11 years, 4 months ago


晕,看来是LZ自己搞错了.事实上主进程没有被KILL.

幽幽子的冬 answered 11 years, 4 months ago


应该就是主"进程"退出了 ,而各个线程没有退出,

多运行几次之后,以前开启的线程还在运行,看起来就象线程被启动了多次了

进程终止之后怎么让各个线程都退出

会说话的大蛋糕 answered 11 years, 4 months ago


这个问题,我只能纯支持帮顶了 向大家学习

拯救大姨妈 answered 11 years, 4 months ago


signal(SIGTERM, (void *)termhandler);// ctrl+c to quit
signal(SIGINT, (void *)term
handler);// kill 'n' to quit

菲莉丝·艾莉斯 answered 11 years, 4 months ago


楼主有个关键的词汇没清楚,你说的这些都是“进程”而不是“线程”

靈夢D靈喵 answered 11 years, 4 months ago


主进程被KILL,子线程是还会继续运行的,两者不相干

西行寺奈奈子 answered 11 years, 4 months ago


linux下貌似没有严格意义上的线程概念
事实上是一组共享资源的进程,因而,主线程被杀死并不意味着子线程会主动退出

osife answered 11 years, 4 months ago


如果你主要问线程,关心fork干吗?
1F就是不懂而已

至于你,标题中所谓的“主进程”、“子线程”俩放在一起就说明你概念不清楚了
这两个主、子得起来么?

如果你一个进程挂掉之后,属于它得线程当然都死光了。你活着得根本不是所谓得“子线程”,而是你fork出来得那一系列进程

<fieldset> <legend> 探讨 </legend>
引用:
楼主有个关键的词汇没清楚,你说的这些都是“进程”而不是“线程”



我帖的代码是回答:
你主进程是从哪里fork 出来的啊。。。

这个问题的,不是线程相关的代码
</fieldset>


丶BA忒SS answered 11 years, 4 months ago


看lz的描述很混乱,不知道启动的是进程还是线程。如果启动的是线程,kill掉进程后,所有线程都会终止。

如果是进程的话,估计你主进程里fork一个子进程,然后子进程里又fork一个进程,导致进程非常多。


shine answered 11 years, 4 months ago


你这里贴的代码都是进程,不是线程。fork创建出来的是进程,不是线程。而且父进程exit之后,子进程不受影响,子进程的结束时要看执行的代码完了,会自己结束。而且子进程和父进程的进程pid是不一样的。
你把概念都没搞清楚。

363545撒 answered 11 years, 4 months ago


主进程启动时,先把子进程都kill掉,再运行实际业务

Horacio answered 11 years, 4 months ago

Your Answer