killproc和pidofproc在Linux上

我有一个脚本,它使用killproc和procofpid命令,并在64位suse上执行罚款。 但是当我在32位redhat上执行脚本时,发现上面的命令不存在。

我没有32位Suse和64位redhat机器来testing我的脚本。

我的猜测是正确的,在64位红帽上面的命令应该可用? 还是上面的Suse和redhat特有的命令?

谢谢

这些命令不太可能是可移植的。 其实这是我第一次听说他们 – 但我想你的问题是与过程的名称,而不是PID。

检查man pgrepman pkill – 他们稍微更便携。 它们是procps包( pstop来自哪里)的一部分,应该在所有的Linux变体上都可用。 它们也可以在Solaris上使用。

killproc在redhat enterprise linux 5.4中是/etc/init.d/functions的一部分

如果你需要的话就这样做

。 /etc/init.d/functions

在你的脚本加载shell函数,它可能在其他版本的红帽,但这是唯一一个我不得不手中的时刻

这些命令被定义为Linux Standards Base (LSB)的一部分,如@AndreKR所述。

但是,在一些像Redhat(也可能是SUSE)这样的系统上,根据安装的软件包,这些函数可能不会被定义在LSB指定的位置,即/lib/lsb/init-functions 。 而是在/etc/init.d/functions中定义的。 另外,在某些版本中,/etc/ /etc/init.d/functions /functions的Redhat版本缺少LSB定义的函数start_daemon 。 如果将以下代码片段添加到脚本的顶部,则应该可以在大多数发行版/安装中进行移植:

 if [[ -f /lib/lsb/init-functions ]]; then . /lib/lsb/init-functions elif [[ -f /etc/init.d/functions ]]; then . /etc/init.d/functions # Pretend to be LSB-compliant function start_daemon() { daemon $* } else echo "Linux LSB init function script or Redhat /etc/init.d/functions is required for this script." echo "See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html" exit 1 fi 

在Ubuntu中使用的是“ Linux标准库 ”规范的一部分,并在那里记录 。

我认为这些命令是distrib特定的:我从来没有见过他们。 killproc应该是一种杀手,但是procofpid应该做什么?

在关于pidofproc的标题中,您可以在大多数linux盒子的pidof下找到这个命令。

我和你有同样的问题,它给了警告:

pidof:命令行上的选项无效!

我改变了

 "killproc -d 10 $cmd" 

 "kill -9 \`pidof $cmd\`"