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内核源代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)