2016-04-26 90 views
0

我運行GNU的coreutils超時命令的程序,運行與超時

gtimeout 600蟒蛇myprogram.py

按照manual

持續時間是浮點數,然後是可選單元:

's'for secon DS(默認值)的「m」爲小時的d'分鐘的「h」爲 天

因此,'python myprogram.py部分應該600秒(10分鐘)內終止。令我驚訝的是,該命令在1小時後實際超時。爲什麼?

+0

也許你的Python腳本沒有響應正確SIGTERM?嘗試添加「-s 9」,例如'gtimeout -s 9 600 python myprogram.py',來發送SIGKILL。 – CherryDT

+0

你能詳細說一下嗎?我可能會接受你的答案。 – zell

+1

我不確定這是否適合您的情況,您必須嘗試。現在這是一個猜測,我認爲這是不夠的實際答案。但問題在於有兩種方式來終止進程:基本上要求進程終止的信號「SIGTERM」(它可能會拒絕這樣做),以及不能被阻止的「SIGKILL」並將強制該進程被操作系統終止。 'gtimeout'通常發送SIGTERM(就像'kill'一樣)。你可以使用'-s'來指定一個不同的信號,比如'9'(與'KILL'相同的信號名稱),就像你用'kill -9'所做的那樣。 – CherryDT

回答

0

您的程序可能會忽略SIGTERM,這是gtimeout用於「請求程序終止」的信號。

你可以有gtimeout使用SIGKILL代替,無法通過添加參數-s 9這樣被忽略或阻塞,:

gtimeout -s 9 python myprogram.py