2011-11-10 68 views
7

我運行一個腳本,如:如何屏蔽殺輸出

sleep 20 & 
PID=$! 
kill -9 $PID >/dev/null 2>&1 

我不希望腳本顯示等的輸出:

line 51: 22943 Killed sleep 

我不知道爲什麼發生這種情況,我有重定向輸出到/ dev/null

回答

15

消息不是來自kill或後臺命令,它來自bash,當它發現其中一個後臺作業已被殺死。爲了避免消息,使用disown從bash的作業控制其刪除:

sleep 20 & 
PID=$! 
disown $PID 
kill -9 $PID 
+0

很好,這就是我想要的,謝謝很多人.. – chemila

+0

不知道殼不會向孩子發送'SIGHUP'當它終止時,請參見[這個問題](http://unix.stackexchange.com /問題/ 3886 /差間的nohup-否認和)。這裏是[答案](http://stackoverflow.com/a/5722850/52499)。 –

6

這是可以做到用「等待」 +重定向等待到/ 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$ 

我喜歡這個溶液比使用「不認」可具有其他含義更多。

理念來源:https://stackoverflow.com/a/5722850/1208218

+0

通過將kill -9語句更改爲: kill -9 $ PID 2>/dev/null 這可以稍微改進:這是因爲kill可能還會輸出其他消息,如: 第3行:kill:(3968) - 沒有這樣的過程 取決於腳本在做什麼 – Roel

-1

另一種方法來禁用工作的通知是把你的命令在sh -c 'cmd &'結構來後臺運行。

#!/bin/bash 

# ... 

sh -c ' 
sleep 20 & 
PID=$! 
kill -9 $PID # >/dev/null 2>&1 
' 

# ... 
-1

我能夠通過重定向我在後臺運行的命令的輸出來實現這一點。在你的情況下,它看起來像:

sleep 20 >>${LOG_FILE} 2>&1 & 

...或者,如果你不想要一個日誌文件:

sleep 20 &> /dev/null & 

然後,當你想殺死後臺進程的PID,它會不標準出示。