bri*_*ice 3 linux unix script bash process
kill -9 $PID &>/dev/null在脚本中杀死进程时,在下一个命令终止后仍会向终端打印一条消息。你如何阻止这种行为?
例如
while true; do
/usr/bin/dostuff -a -b -c
PID=$(pidof -o %PPID /usr/bin/dostuff)
sleep 1;
kill -KILL $PID &>/dev/null
echo "hello"
done
Run Code Online (Sandbox Code Playgroud)
会打印类似的东西
hello
./my-cript.sh: line 12: 7134 Killed
/usr/bin/dostuff -a -b -c
Run Code Online (Sandbox Code Playgroud)
当我只想打印“你好”时
编辑: 干净的解决方案是在子shell中运行程序,或者否认它。
#SOLUTION
while true; do
/usr/bin/dostuff -a -b -c &
disown
PID=$!
sleep 1;
kill -KILL $PID &>/dev/null
echo "hello"
done
Run Code Online (Sandbox Code Playgroud)
输出线不会被重定向到的/ dev /空,因为他们不是STDOUT / STDERR从杀进程。它们是 shell 的作业控制机制的输出。
如果您使用的是bash,则可以在作业调用后立即运行disown:
while true; do
/usr/bin/dostuff -a -b -c
### remove from shell job table
disown
PID=$(pidof -o %PPID /usr/bin/dostuff)
sleep 1;
kill -KILL $PID &>/dev/null
echo "hello"
done
Run Code Online (Sandbox Code Playgroud)
我在 Debian Lenny 上的bash v3.2.39 中对此进行了测试/bin/sleep 10 &,代替了上述/usr/bin/dostuff命令:
./tmp.sh
hello
hello
hello
hello
^C
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |