如何關閉C中的Linux程序我正在編輯一個腳本以擁有一個計時器,腳本只運行10秒鐘然後關閉。X秒後終止程序Linux C
我跑的線路是: ./startmerge
這是一個C語言代碼到我的所有服務器文件合併在一起,我下載了,但我只希望它運行10秒。
如何關閉C中的Linux程序我正在編輯一個腳本以擁有一個計時器,腳本只運行10秒鐘然後關閉。X秒後終止程序Linux C
我跑的線路是: ./startmerge
這是一個C語言代碼到我的所有服務器文件合併在一起,我下載了,但我只希望它運行10秒。
如果大部分的時間都花在計算與CPU(換句話說,如果在./startmerge
10秒未在IO花),那麼你要限制CPU的時間,所以使用setrlimit(2)系統調用與RLIMIT_CPU
。在bash中,要在運行startmerge
前使用其內置ulimit
(調用系統調用setrlimit
),見this answer,像
ulimit -t 10
。
如果您startmerge
不是CPU密集型的,要kill
它10秒後,也許(見this)
startmerge & ; pidof_startmerge=$!
sleep 10; kill $pidof_startmerge
更重要的是,讓(約一sleep 1
如循環十倍)
如果您有權訪問startmerge
的C源代碼,並且想要改進它,請先閱讀time(7)和signal(7)。由於Duck評論,考慮alarm(2)或setitimer(2)或timer_create(2)並建立一個信號處理程序 - 例如,對於SIGALRM
和sigaction(2)(但不要忘記,信號處理程序僅限於呼叫異步信號安全函數;您可以在其中設置全局變量volatile sig_atomic_t
並在外部測試該變量)。如果您startmerge
有基於一些復系統調用像poll(2)(或舊select(2)
)一些event loop它甚至應該是簡單的,而Linux的具體timerfd_create(2)可能是非常有益的。
您可以在bash中捕獲SIGALRM
,請參閱this。
Advanced Linux Programming有一些與您的問題相關的章節。 Advanced Bash Programming Guide也是有用的閱讀。
常見的方法是使用看門狗定時器,作爲另一個進程運行。當你的腳本啓動,保存生成的PID - 然後讓看門狗盯緊,如果需要發送的終止信號。 –
你想,如果還沒有完成什麼它應該在10秒內做會發生什麼呢? – Bandrami
'報警(10)'是非常簡單的,雖然它可能不是你真的想要走的路。請注意,你需要寫一個小信號處理程序,因爲默認的處理方式是終止進程。 – Duck