linux怎么销毁线程

linux怎么销毁线程,第1张

杀死线程 所在的进程就可以,

ps aux | grep 进程名

kill -TERM 进程号

如果你指的写程序, 那就参考 man pthread_exit

我们使用linux时遇到端口占用,在了解占用程序影响不大的情况下,会通过netstat命令找到占用端口的进程,直接kill掉

查找端口占用命令:

netstat -tnlp | grep 80

可以看到,进程id为20902的进程占用了80端口

我们可以选择使用命令 kill pid 杀掉进程

kill 20902

或者使用kill -9 pid 强杀进程

kill -9 20902

如果你需要杀掉所有筛选结果下的进程可以使用

ps -aux|grep name|awk '{print $2}'|xargs kill -9

其中name是你要查询的服务名称,例如我要查nginx的所有服务可以使用

ps -aux|grep nginx

我们要筛选出第二项pid

ps -aux|grep name|awk '{print $2}'

筛选出后要杀掉这些进程

ps -aux|grep name|awk '{print $2}'|xargs kill -9

这样就批量杀掉筛选出的所有进程了

要了解进程的终止,你必须先了解进程结构体task_struct,期中有一些与进程终止相关的非常重要的域,task_struct在内核源代码的linux/sched.h中定义。

进程终止有多种方式,无论何种方式,都会调用内核函数sys_exit()函数,而最终调用do_exit()函数(在kernel/exit.c中定义)在do_exit()函数中首先会做一些检测,包括确保要终止的进程ID不是0或者1,再保证该进程不是处在中断处理程序之中,之后将要终止进程的task_struct结构体中的flag域设置为PF_EXITING表示该进程已经结束,然后就是比较正式的销毁过程,释放进程占用的资源。比如释放其占用的的分配内存(exit_mm()),释放进程间通信的信号量(exit_sem()),释放进程创建或者打开的文件描述符(exit_files()),释放文件系统数据(exit_fs()),释放线程(exit_thread())等等,最后向其父进程发送SIGCHILD信号,将进程状态设置为终止,调用schedule(),将CPU控制权交给其他进程。

这是大概的销毁过程的,更详细的过程请参考linux

kernel

primer这本书以及linux内核源代码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8299436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存