Mas*_*oor 2 linux bash process
我认为这应该是直截了当的,但结果令我感到困惑.
当我使用命令运行bash脚本时,
sudo ./restartccpd.bash
Run Code Online (Sandbox Code Playgroud)
屏幕上没有任何内容.也是问题
sudo /etc/init.d/ccpd status
Run Code Online (Sandbox Code Playgroud)
运行脚本后独立于屏幕产生空,而不是显示守护进程的pid.这证明只有pkill命令正在工作.
脚本的内容是,
#!/bin/bash
sudo pkill -9 ccpd
sudo /etc/init.d/ccpd start
sudo /etc/init.d/ccpd status
Run Code Online (Sandbox Code Playgroud)
从终端运行时,命令工作正常.但是当作为脚本运行时,如上所述,它没有按预期工作.
我尝试在命令之间插入sleep命令,但没有任何效果.此外,syslog中没有任何内容.所以,我无法诊断问题.
任何建议将不胜感激.
pkill将杀死ccpd命令名称中包含的任何内容.你的脚本被调用restartccpd.bash.第一行是:
pkill ccpd
Run Code Online (Sandbox Code Playgroud)
因此脚本启动,运行pkill(不产生输出)并立即杀死自己.塔达!
最简单的解决方案是重命名脚本.你也可以这样做:
kill $(pgrep -l ccpd | grep -v restartccpd | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)
这将生成一个进程名称和pid匹配列表,然后从列表中ccpd删除restartccpd,然后使用该进程终止进程kill.