我有一个脚本,它使用killproc和procofpid命令,并在64位suse上执行罚款。 但是当我在32位redhat上执行脚本时,发现上面的命令不存在。
我没有32位Suse和64位redhat机器来testing我的脚本。
我的猜测是正确的,在64位红帽上面的命令应该可用? 还是上面的Suse和redhat特有的命令?
谢谢
这些命令不太可能是可移植的。 其实这是我第一次听说他们 – 但我想你的问题是与过程的名称,而不是PID。
检查man pgrep
或man pkill
– 他们稍微更便携。 它们是procps
包( ps
和top
来自哪里)的一部分,应该在所有的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\`"