我運行一個腳本,如:如何屏蔽殺輸出
sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1
我不希望腳本顯示等的輸出:
line 51: 22943 Killed sleep
我不知道爲什麼發生這種情況,我有重定向輸出到/ dev/null
我運行一個腳本,如:如何屏蔽殺輸出
sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1
我不希望腳本顯示等的輸出:
line 51: 22943 Killed sleep
我不知道爲什麼發生這種情況,我有重定向輸出到/ dev/null
消息不是來自kill
或後臺命令,它來自bash,當它發現其中一個後臺作業已被殺死。爲了避免消息,使用disown
從bash的作業控制其刪除:
sleep 20 &
PID=$!
disown $PID
kill -9 $PID
這是可以做到用「等待」 +重定向等待到/ dev/null的:
sleep 2 &
PID=$!
kill -9 $PID
wait $PID 2>/dev/null
sleep 2
sleep 2
sleep 2
這個腳本會不給 「封殺」 的消息:
-bash-4.1$ ./test
-bash-4.1$
同時,如果您嘗試使用類似:
sleep 2 &
PID=$!
kill -9 $PID 2>/dev/null
sleep 2
sleep 2
sleep 2
它將輸出消息:
-bash-4.1$ ./test
./test: line 4: 5520 Killed sleep 2
-bash-4.1$
我喜歡這個溶液比使用「不認」可具有其他含義更多。
通過將kill -9語句更改爲: kill -9 $ PID 2>/dev/null 這可以稍微改進:這是因爲kill可能還會輸出其他消息,如: 第3行:kill:(3968) - 沒有這樣的過程 取決於腳本在做什麼 – Roel
另一種方法來禁用工作的通知是把你的命令在sh -c 'cmd &'
結構來後臺運行。
#!/bin/bash
# ...
sh -c '
sleep 20 &
PID=$!
kill -9 $PID # >/dev/null 2>&1
'
# ...
我能夠通過重定向我在後臺運行的命令的輸出來實現這一點。在你的情況下,它看起來像:
sleep 20 >>${LOG_FILE} 2>&1 &
...或者,如果你不想要一個日誌文件:
sleep 20 &> /dev/null &
然後,當你想殺死後臺進程的PID,它會不標準出示。
很好,這就是我想要的,謝謝很多人.. – chemila
不知道殼不會向孩子發送'SIGHUP'當它終止時,請參見[這個問題](http://unix.stackexchange.com /問題/ 3886 /差間的nohup-否認和)。這裏是[答案](http://stackoverflow.com/a/5722850/52499)。 –