2016-09-25 59 views
0

是否可以通過perl腳本將SIG STOP發送到進程ID,然後如果過了一段時間(比如說1分鐘),可以發送SIG CONT到PID,除非「別人「已經將此SIG CONT發送給過程?sig在STOP中用Perl超時處理

謝謝。

回答

2

進程可以使用waitpid系統調用(使用WUNTRACED/WCONTINUED標誌)來監視子進程何時停止/恢復。這僅適用於受監視的進程是原始進程的子進程。但是不管孩​​子是否是孩子,您總是可以將信號SIGSTOP/SIGCONT發送到其他進程(前提是它們屬於同一用戶)。如果一個進程已經恢復運行,因爲它收到了SIGCONT,發送第二個SIGCONT是完全無害的。所以你可以做

kill 'STOP',$pid or die "cannot send STOP signal: $!"; 
sleep 60; 
kill 'CONT',$pid or die "cannot send CONT signal: $!"; 

而不用擔心第二個信號。

+0

嗨,不完全是,在60秒睡眠的中間,有人可以發送CONT信號,然後再次停止信號,因此將啓動「第一次」睡眠並且睡眠時間少於60秒。我希望我很清楚。 @redneb – Mojo

+0

@Mojo你的要求很不明確。你必須給我們更多的細節。 – redneb