主进程被kill或者异常退出,子线程还在跑怎么办?
我是在linux下gcc,
主要是socket服务,
开启了几个线程,今天偶然发现,虽然我已经killall了,但是其中一个日志文件仍然在不停收到写入的日志,
另外,我的主进程是fork出来的,这样他就在后台运行了,即使我退出了ssh,同样可以运行,
我刚才试着用
signal(SIGKILL,sk);
signal(SIGINT, sk);
但是似乎没有收到这样的信号!
每个线程一开始我都:
pthread_detach(pthread_self());
了的
[解决办法]
还在运行的线程是属于哪个进程?父进程关闭的话不代表子进程也同时被关闭。
[解决办法]
这个你对linux的进程机制还不太了解,主(父)进程退出的话,子进程还是可以运行的,只不过这时子进程的父进程会变成init进程。
[解决办法]
用ps --ppid 父进程id jf
列出子进程id,然后再杀子进程呗。
[解决办法]
什么叫不停在启动 ,,,
[解决办法]
是不是没用wait()的原因?
[解决办法]
ps ax 应该会把全部进程例出来啊。你仔细找找。找到发个kill -9 信号杀死。
[解决办法]
可能是你的循环一直在fork吧,一直在创建子进程。
[解决办法]
让父进程一直wait,直到子进程全退出
或者fork两次(相关原因,lz可以google 如果避免僵尸进程)
[解决办法]
signal(SIGTERM, (void *)term_handler);// ctrl+c to quit
signal(SIGINT, (void *)term_handler);// kill 'n' to quit
[解决办法]
应该就是主"进程"退出了 ,而各个线程没有退出,
多运行几次之后,以前开启的线程还在运行,看起来就象线程被启动了多次了
进程终止之后怎么让各个线程都退出?
[解决办法]
晕,看来是LZ自己搞错了.事实上主进程没有被KILL.
[解决办法]
demon进程
[解决办法]
[解决办法]
主进程被KILL,子线程是还会继续运行的,两者不相干
[解决办法]
楼主有个关键的词汇没清楚,你说的这些都是“进程”而不是“线程”
[解决办法]
主进程启动时,先把子进程都kill掉,再运行实际业务
[解决办法]
你这里贴的代码都是进程,不是线程。fork创建出来的是进程,不是线程。而且父进程exit之后,子进程不受影响,子进程的结束时要看执行的代码完了,会自己结束。而且子进程和父进程的进程pid是不一样的。
你把概念都没搞清楚。
[解决办法]
看lz的描述很混乱,不知道启动的是进程还是线程。如果启动的是线程,kill掉进程后,所有线程都会终止。
如果是进程的话,估计你主进程里fork一个子进程,然后子进程里又fork一个进程,导致进程非常多。
[解决办法]
这个问题,我只能纯支持帮顶了 向大家学习
[解决办法]
如果你主要问线程,关心fork干吗?
1F就是不懂而已
至于你,标题中所谓的“主进程”、“子线程”俩放在一起就说明你概念不清楚了
这两个主、子得起来么?
如果你一个进程挂掉之后,属于它得线程当然都死光了。你活着得根本不是所谓得“子线程”,而是你fork出来得那一系列进程
[解决办法]
linux下貌似没有严格意义上的线程概念
事实上是一组共享资源的进程,因而,主线程被杀死并不意味着子线程会主动退出
------解决方案--------------------
瞎说,进程是内存等资源的载体,线程不是。他们创建的方式和资源的使用也是完全不一样的