pidof命令获取不到程序的pid问题解决

 更新时间:2023年09月07日 09:04:09   作者:viyon  
这篇文章主要为大家介绍了pidof命令获取不到程序的pid问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

pidof命令获取不到程序的pid

问题描述

有一个功能,需要监控某个进程是否运行,如果由于某些原因没在运行(如异常挂死),则执行某个脚本,重新启动系统。很简单那的一个功能,三下五除二写了一个脚本:

#!/bin/bash
all_process_pid=(`pidof xxxx`)
process_num=${all_process_pid[*]}
if [ ${process_num}  -eq 1 ];then
    echo "normal"
else
    echo "unnormal"
fi
exit

运行后,很完美,可以正常工作。然而在运行了一段时间后,总是发现系统莫名奇妙地重启,查看日志发现被监控的xxxx进程总是异常退出,因而会重启系统。然而这个进程一般情况下比较稳定,不会那么频繁的挂死。但为了确定问题,就在监控脚本中加了一些调试信息,打印出现异常时候所有的进程。当出现问题的时候,发现这个进程其实是存在的,通过ps可以看到这个进程正则运行,但通过pidof获得的进程却为空,基本上判断是pidof未找到进程ID导致的,可为什么pidof未找到呢?查询资料后发现,pidof默认情况下,不能列出zombie和I/O waiting状态的进程。

查看 zombie和I/O waiting状态的进程

通过pidof -h可以看到有个-z选项可以列出zombie和I/O waiting状态的进程。

[root@probe: ~]$ pidof  -h
pidof usage: [options] <program-name>

 -c           Return PIDs with the same root directory
 -d <sep>     Use the provided character as output separator
 -h           Display this help text
 -n           Avoid using stat system function on network shares
 -o <pid>     Omit results with a given PID
 -q           Quiet mode. Do not display output
 -s           Only return one PID
 -x           Return PIDs of shells running scripts with a matching name
 -z           List zombie and I/O waiting processes. May cause pidof to hang.

但这个-z选项可能会导致pidof异常。

需要注意的是,不是每个发行的操作系统中的pidof命令都有-z选项,比如我目前使用的fedora workstation 38版本中,pidof就没有-z选项。

[zy@fedora ~]$ pidof -V
pidof from procps-ng 3.3.17
[zy@fedora ~]$ pidof -h

Usage:
 pidof [options] [program [...]]

Options:
 -s, --single-shot         return one PID only
 -c, --check-root          omit processes with different root
 -q,                       quiet mode, only set the exit code
 -w, --with-workers        show kernel workers too
 -x                        also find shells running the named scripts
 -o, --omit-pid <PID,...>  omit processes with PID
 -S, --separator SEP       use SEP as separator put between PIDs
 -h, --help     display this help and exit
 -V, --version  output version information and exit

解决方案

问题既然已经明确,就比较好修改了。由于pidof使用-z选项存在风险,且pidof命令在不同的操作系统中参数不相同,当软件运行在不支持-z选项的操作系统上会有问题,因此决定使用其它命令判断。使用ps和grep组合进行判断。

参考资料https://forums.linuxmint.com/viewtopic.php?t=335764

以上就是pidof命令获取不到程序的pid问题解决的详细内容,更多关于pidof命令获取不到程序pid的资料请关注脚本之家其它相关文章!

相关文章

  • Linux中修改文件名的多种方法总结

    Linux中修改文件名的多种方法总结

    在Linux系统中,通过命令行界面可以方便地修改文件名,本篇博客将介绍几种常见的方法,包括mv命令、rename命令、find和mv命令的组合、sed命令以及使用bash脚本,这些方法可以根据实际需求进行选择,提供了灵活性和多样性,需要的朋友可以参考下
    2024-01-01
  • Linux系统中同时执行多个脚本运行方法小结

    Linux系统中同时执行多个脚本运行方法小结

    文章详细解释了在命令行中使用&&,||,;和&符号来控制Python脚本的执行顺序和错误处理策略,&&确保前一个脚本成功后执行下一个,||则在前一个脚本失败后执行后续脚本,;无论前一个脚本是否出错都会执行下一个,而&则用于并行执行多个脚本,需要的朋友可以参考下
    2024-12-12
  • Linux中的内核链表实例详解

    Linux中的内核链表实例详解

    这篇文章主要介绍了Linux中的内核链表实例详解的相关资料,链表中一般都要进行初始化、插入、删除、显示、释放链表,寻找节点这几个操作,需要的朋友可以参考下
    2017-08-08
  • Linux中的service命令与systemctl命令有何区别

    Linux中的service命令与systemctl命令有何区别

    在Linux中,service 和 systemctl 是两个至关重要且极其相似的命令,它们如此相似,以至于人们很容易想知道它们之间有何不同,是否可以互换使用,下面我们就来看看之前的区别到底有哪些吧
    2023-08-08
  • Shell脚本实现检测文件是否被修改过代码分享

    Shell脚本实现检测文件是否被修改过代码分享

    这篇文章主要介绍了Shell脚本实现的检测文件是否被修改代码分享,其实了解了原理就可以做很多事了,需要的朋友可以参考下
    2014-09-09
  • shell 生成随机数的实现方法总结

    shell 生成随机数的实现方法总结

    这篇文章主要介绍了 shell 生成随机数的实现方法总结的相关资料,希望通过本能帮助到大家,让大家彻底掌握这几种随机数的方法,需要的朋友可以参考下
    2017-09-09
  • shell脚本实现统计文件大小、批量创建用户的示例

    shell脚本实现统计文件大小、批量创建用户的示例

    这篇文章主要介绍了shell脚本实现统计文件大小、批量创建用户的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Linux中10个有用的命令行补全例子

    Linux中10个有用的命令行补全例子

    这篇文章主要为大家详细介绍了Linux中10个有用的命令行补全例子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • shell中的排序算法示例代码

    shell中的排序算法示例代码

    本文主要介绍了shell中的排序算法示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 使用AWK在shell中生成日历小程序

    使用AWK在shell中生成日历小程序

    这篇文章主要为大家详细介绍了如何使用AWK在shell中生成日历小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07

最新评论