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


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

主要是socket服务,

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

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

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

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

每个线程一开始我都:

pthreaddetach(pthreadself());

了的

c语言 基本概念 程序开发

经典的KOF 11 years, 11 months ago


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


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


demon进程

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


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

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


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

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

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

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


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

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


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

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


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

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


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

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


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

osife answered 11 years, 11 months ago


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

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

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

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



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

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


丶BA忒SS answered 11 years, 11 months ago


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

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


shine answered 11 years, 11 months ago


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

363545撒 answered 11 years, 11 months ago


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

Horacio answered 11 years, 11 months ago

Your Answer