kill 进程时遇到的一件有意思的事情

这篇具有很好参考价值的文章主要介绍了kill 进程时遇到的一件有意思的事情。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.案例现象

一般来讲,我们在 kill 掉一个进程的时候通常有两个选择:

  1. 找到进程的 pid 号,然后执行 kill 命令
  2. 找到进程的名字,然后执行 pkill 命令

pkill 和 kill 命令都是向指定的进程发送信号,从而完成终结进程的操作,主要区别在于 pkill 命令与 pgrep 配套使用,能够踢出指定终端用户、同时根据 UID 和用户名来终止进程

今天给大家分享一件我在使用 pkill 命令时遇到的比较有意思的事情

这台机器上(Cent OS7)运行着一个进程 after_sleep60s_output

[root@localhost ~]# ps -ef | grep [a]fter
root      49146  48933  0 09:39 pts/0    00:00:00 /usr/local/bin/after_sleep60s_output

执行 pkill 命令

[root@localhost ~]# pkill after_sleep60s_output

然后当我使用 ps 命令查看的时候,我发现这个进程还在,而且返回了状态码 1

[root@localhost ~]# echo $?
1

用 kill 命令试试,发现成功了

[root@localhost ~]# kill 49146

奇怪?为什么用 pkill 命令 kill 不掉这个进程?

2.定位问题

通过 man pkill 我发现,pkill 命令是默认结合 pgrep 来使用的

pgrep 首先找出目标进程(running),然后 pkill 再根据 pgrep 的结果来 kill 目标进程

pgrep looks through the currently running processes and lists the process IDs which match the selection criteria to stdout. All the criteria have to match. For example,

​ $ pgrep -u root sshd

will only list the processes called sshd AND owned by root. On the other hand,

​ $ pgrep -u root,daemon

will list the processes owned by root OR daemon.

pkill will send the specified signal (by default SIGTERM) to each process instead of listing them on stdout.

pgrep 找目标进程是通过获取 /proc/[pid]/stat 文件中的进程名来实现的,但是这个文件中的进程名是有长度限制的——只有15个字符

Linux 中的每一个进程都维护了一个 struct_task_struct 结构体,这个结构体在/usr/src/kernels/内核版本/include/linux/sched.h里面

这里面有一个字段定义了不包括路径的可执行文件的名字,最大长度是 16 bytes,除去最后一个留给 null 的,就只有最多 15 个字符

/* Task command name length */
#define TASK_COMM_LEN 16
 char comm[TASK_COMM_LEN]; /* executable name excluding path
                              - access with [gs]et_task_comm (which lock
                                   it with task_lock())
                              - initialized normally by setup_new_exec */

然后我们看一下上面例子中进程对应的 stat 文件

[root@localhost ~]# cat /proc/49146/stat
49212 (after_sleep60s_) S 48933 49212 48933 3 .....

可以看到文件里面的进程名字被截断成了15个字符:after_sleep60s_

如果要使用 pkill 命令,正确方式如下:

[root@localhost ~]# pkill after_sleep60s_

你也可以加一个 -f 参数

[root@localhost ~]# pkill -f after_sleep60s_output

这个参数会告诉 pkill 不去/proc/[pid]/stat 文件找进程,而是去 /proc/[pid]/cmdline

里面找

这个文件里面包含了进程启动的时候的完整命令,包括参数

[root@localhost ~]# /proc/49146/cmdline
/usr/local/nginx/sbin/after_sleep60s_output

3.解决问题

想要准确的 kill 掉一个进程,可以使用下面的方法:

  • pidof 命令获取到进程对应的 PID,再使用 kill 命令
  • 使用 systemd 启动的,通过 systemctl 命令来控制
  • 使用 pkill 命令的时候建议加上 -f 参数

最后附上相关 issue 链接:

1、https://stackoverflow.com/questions/23534263/what-is-the-maximum-allowed-limit-on-the-length-of-a-process-name文章来源地址https://www.toymoban.com/news/detail-409493.html

到了这里,关于kill 进程时遇到的一件有意思的事情的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分享一组有意思的按钮设计

    先上效果图: 一共16个,每个都有自己不同的样式和效果,可以用在自己的项目中,提升客户体验~ 再上代码:

    2024年02月04日
    浏览(39)
  • 【动画进阶】有意思的网格下落渐次加载效果

    最近,群友贴了一个非常有意思的动画效果,整体动画效果如下: 点击某个按钮后,触发一个动画效果,原本的网格内容,将按顺序(又带点随机的效果)从高处下落进行加载填充动画。 当然,我个人认为这个动画有点华而不实,主要体现在这个动画一次需要耗费较长时间

    2024年02月16日
    浏览(46)
  • 涨姿势了,有意思的气泡 Loading 效果

    今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们之前的: 使用纯 CSS 实现超酷炫的粘性气泡效果 巧用 C

    2023年04月13日
    浏览(43)
  • 第五期:字符串的一些有意思的操作

    PS:每道题解题方法不唯一,欢迎讨论!每道题后都有解析帮助你分析做题,答案在最下面,关注博主每天持续更新。 1. 替换空格 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成\\\"%20\\\"。 示例1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” 示例2: 输入:s =

    2024年02月08日
    浏览(52)
  • 分享一个有意思的文字飞入动画(模仿水滴融合)

    先上效果图: 代码如下:

    2024年02月01日
    浏览(42)
  • 【动画进阶】有意思的 Emoji 3D 表情切换效果

    最近,群里面的同学发了这么一个非常有意思是动画效果: 原效果地址 -- CodePen Demo -- Letter Hop 当然,原效果,主要使用了 GSAP 动画库以及一个 3D 文字 JavaScript 库: 但是,这个效果,其实本身并不复杂。 本文,我们将不借助任何动画库,尝试用最简单的 CSS 和 JavaScript 代码还

    2024年02月14日
    浏览(36)
  • 有意思!一个关于 Spring 历史的在线小游戏

    发现 Spring One 的官网上有个好玩的彩蛋,分享给大家! 进到Spring One的官网,可以看到右下角有个类似马里奥游戏中的金币图标。 点击该金币之后,会打开一个新的页面,进入下面这样一个名为:The History Of Spring 的在线小游戏 你可以使用上下左右的方向键来控制Spring的Logo一

    2024年04月27日
    浏览(38)
  • vue有意思的图片动画插件direction-reveal

    功能:操作简单好上头,动画特效很丝滑,有很多种供选择 导入到需要使用动画的单页面 使用样式 导入css,如果用到了scss就导入scss,用的css就导入.css文件 https://github.com/NigelOToole/direction-reveal 文章到此结束,希望对你有所帮助~

    2024年02月12日
    浏览(34)
  • 有意思,我的GitHub账号值$23806.2,快来试试你的?

    睡不着,看到一个有意思的网站: Estimate Github Worth Generator 。 它可以用来估算 GitHub 账号的价值。马上试了一下。 我的账号估值: $23806.2 操作很简单,点击Estimate Github Worth Generator,进入网站。 具体如下图: 在唯一的输入框中,输入您的GitHub账号,点击按钮 Generate Worth 按钮

    2024年02月04日
    浏览(50)
  • 码出高效_第一章 | 有意思的二进制表示及运算

    设想有8条电路,每条电路有高电平和低电平两种状态,即就有2 8 =256种不同的信号。假设其表示区间为0~255,最大数即2 8 -1。 那么32条电路能够表示最大数为(2 32 -1)=4294967295,即所谓的32位电路信号。 正负数表示: 上面的8条电路,最左侧一条表示正负:0-整数,1-负数,不

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包