主进程被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进程
[解决办法]