首发:公众号【编程珠玑】

作者:守望先生

ID:shouwangxiansheng

四折购书福利不要错过,鉴于问我推荐书的朋友比较多,过几天我会整理一个自己的书单分享给大家,有的好书存在缺货情况,建议早下手。好了,正文开始。

前言

你是如何终止你的程序的?在《killall为什么找不到你的进程》一文中提到了几个杀死进程的方法,本文来总结一下有哪些方法可以终止进程。

ctrl+c

没错,这应该是你最常用到的方法了,当前终端非后台运行一个程序后,使用ctrl+c
即可终止当前程序。

ctrl+z

这种方式不算完全终止,更像是暂停,因为它可以通过fg或者bg继续执行。
举个例子,代码如下:

//test.c
//来源:公众号【编程珠玑】
#include<stdio.h>
int main(void)
{int i = 0;for(i = 0;i < 100;i++){printf("%d\n",i);sleep(1);}return 0;
}

编译运行到一定程序后,按下ctrl+z:

$ gcc -o test test.c
$ ./test
0
1
2
^Z
[1]+  Stopped                 ./hello
root@ubuntu16:c$ fg
./hello
3
4
5
root@ubuntu16:c$

在ctrl+z之后,再输入fg或者bg,你会发现它接着上次的地方继续运行。

kill

这是最常见也是最常用的了,虽然它名为kill,但实际上它可以给进程发送各种类型的信号,其中信号9就是比较常用的,即用来终止进程。

$ kill -9 pid

kill用于给进程发信号,上面的命令表示给进程id为pid的程序发送9信号。
常见信号如下:

  • HUP     1    终端断线

  • INT       2    中断(同 Ctrl + C)

  • QUIT    3    退出(同 Ctrl + \)

  • TERM    15    终止

  • KILL      9    强制终止

  • CONT   18    继续(与STOP相反, fg/bg命令)

可以看到信号KILL就是强制终止程序。

你也可以通过这样来查看这些数字的意义:

$ kill -l 9
KILL
$ kill -l1) SIGHUP     2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP6) SIGABRT     7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV    12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

killall

killall进程杀死进程,它在某些情况下会失效,具体可以参考《killall为什么找不到你的进程》
它还支持杀死一定时间的进程,例如杀死运行超过30分钟的hello进程:

$ killall -o 30m hello

其中-o表示older-than,当然你还可以用-y,表示yonger-than。
m表示分钟,还有其他的时间刻度:

  • s    秒

  • m    分钟

  • h    小时

  • d    天

  • w    周

  • M    月

  • y    年

它除了可以根据名字还可以根据正则表达式来杀死进程。使用-r参数即可。

pkill

pkill也可以根据进程名杀死进程,它和killall有点类似。

$ pkill hello

由于你可能起了多个hello程序,所以为了杀死最旧的进程,你可以这样做:

$ pkill -o hello #oldest

或者杀死最新的进程:

$ pkill -n hello #newest

或者计算运行的hello程序的数量:

$ pkill -c hello

如何查找进程id

上面提到的有些命令需要根据pid进行操作,如何获取pid呢?也有几种常见的方法。

ps

这是最常见的的了,可以参考《ps命令实例详解》

pidof

pidof可以直接获取某个进程的进程id,也比较准确:

$ pidof hello
7584

结合kill可以这样用:

$ kill -9 `pidof hello`

是不是一气呵成?

pgrep

它同样可以通过名字直接获取到进程id:

$ pgrep hello
19971
24770

top

top 的结果中也可以看到各个进程的进程id。

总结

本文仅对一些常见终止进程方式进行简单介绍,更多用法可以参考对应手册。
但是这些操作都有着同样的本质,那就是给进程发送信号,而进程通常对这个信号的处理是终止程序或者被迫终止。所以如果你想要实现优雅退出,可以试着给进程发特定信号,在收到该信号后,进程做善后处理,然后退出。

推荐阅读:

四折购书福利

Linux下如何拆分大的日志文件?

学Linux到底学什么?

C++中是如何调用C接口的?

关注公众号【编程珠玑】,获取更多Linux/C/C++/算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源

杀死进程的N种姿势你知道吗相关推荐

  1. linux杀死进程的五种方法

    方法一: Terminal终端输入: gnome-system-monitor,就可以打开system monitor 如图: 然后找到相应进程,右击选择kill process就可以了 方法二: 通 ...

  2. linux下杀死进程的10种方法

    基础篇: 首先,用ps查看进程,方法如下: $ ps -aux 内容如下: ....... root     17149  0.0  0.1 101700  3572 ?        Ss   14 ...

  3. android 杀进程 方法,android中杀死进程的方法

    第一种方法:这个方法只能自杀,不能杀死其他进程~ /**************************************************** *            杀死进程的第一种 ...

  4. android 杀死后台进程,android 几种杀进程的方式

    今天在编写 application 通用组件时,需要在低内存的回调中杀死进程,所以找了下 androd 傻进程的方法,总结下来有下面几种: 根据进程名称杀进程 android.os.Process.k ...

  5. Python 技术篇-通过进程名称、PID杀死windows进程的两种方法,获取当前运行程序的pid

    方法一: 利用 os 杀死进程. import os# 通过进程名称杀死进程 os.system('taskkill /f /im %s' % 'python.exe')# 通过pid杀死进程 os. ...

  6. Win10 通过cmd查看端口占用、相应进程、杀死进程等的命令

    Win10 通过cmd查看端口占应进程.杀死进程等的命令 文章目录: 一. 查看所有进程占用的端口 二.查看占用指定端口的程序 三.通过任务管理器杀死相关的进程 一. 查看所有进程占用的端口 在开始- ...

  7. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  8. linux查找被杀死的进程,linux查找进程和杀死进程

    查看进程:ps -ef | grep 检索内容 杀死进程:kill pid       (进程号) kill -9 pid      强制杀死进程 ps命令将某个进程显示出来 grep命令是查找 中间 ...

  9. Linux OOM 自动杀死进程(转)

    Linux OOM 自动杀死进程 问题描述: 今天上班后,登录一台内网测试服务器,发现部分进程失踪 (Nginx/PHP-FPM/MySQL/Crond). 解决方法: 1.首先启动这些进程,保证正常 ...

最新文章

  1. carplay是否可以用安卓系统_是否可以仅用键盘来操作Windows 10系统和Windows 10应用?...
  2. php laravel paginate,laravel 8 修改默认的paginate分页样式 的方法可以很简单
  3. 反距离加权插值法例题_GMS插值中的反距离权重法(Inverse distance weighted)
  4. Android项目开发实战—倒计时[Handler,Timer,TimerTask,Message]
  5. Ubuntu 免密登录
  6. 【HTML/CSS】margin塌陷和合并问题
  7. maya如何导出ue4_ue4 maya max导入导出问题
  8. QQ恶搞 - 让艾特你的人语无伦次
  9. 基于HTML5 WebGL 与 GIS 的智慧机场大数据可视化分析
  10. win10易升工具使用教程,win10易升如何使用
  11. correl函数相关系数大小意义_EXCEL中的相关系数能说明什么?
  12. 鸿蒙系统反应慢,系统优化非常的关键 鸿蒙2.0和iOS14的反应速度测试
  13. Linux系统中dmesg命令使用详解
  14. 【Usaco2009 gold 】拯救奶牛
  15. python升维方法_数据升维
  16. 三极管工作原理分析,精辟、透彻,看后你就懂
  17. WinDbg非常简单的调试dmp文件
  18. 利用Metasploit控制目标电脑(Win7_x64系统)
  19. 数据结构——树 | 孩子双亲数组表示法
  20. mysql replication slave_MySQL Replication,主从同步( Master-Slave)

热门文章

  1. Java String格式日期加1秒(分钟或小时)
  2. Css定制Drupal主题风格
  3. SketchUp快快快快快速入门
  4. 拜占庭将军问题对应的分布式一致性算法
  5. 【C++ 科学计算】C++ 计算总平方和、残差平方和
  6. Axure 线框图 学习笔记
  7. cesium之3D Tiles Next(下一代的3D Tiles)介绍
  8. python类定义以及调用_python中如何定义和调用类详解
  9. 湖北万润冲刺科创板上市:第一大客户为宁德时代,比亚迪忽上忽下
  10. ffmpeg对包含封面的音频转m3u8格式视频时,m3u8列表只有一个,无法分割成多个ts文件