我使用libreoffice/openoffice作爲無頭過程來處理我通過unoconv「提交」的服務器上的一些文檔轉換任務。偶爾,實際上做這個工作的過程soffice.bin似乎被楔住了。我試着玩弄strace,看到當啓動新的unoconv實例時,他們仍然連接並與soffice進程交談,只是在「壞」文檔進入後沒有其他事情發生。如果它很簡單以至於檢測到soffice不再與傳入的套接字交談,編寫看門狗將很容易。但顯然不是那麼簡單。任何想法如何判斷什麼時候南下?如何檢測並殺死一個楔入的soffice.bin進程?
2
A
回答
2
這裏是我的設置一個cron作業:
def monitor_unoconv
retval = false
target_dir = "/tmp/monitor_unoconv"
begin
Timeout::timeout(30) do
FileUtils.mkdir_p(target_dir)
FileUtils.cp(File.dirname(__FILE__) + "/../hello.odt", target_dir)
Dir.chdir target_dir do
retval = system("unoconv -f html hello.odt")
end
end
rescue => e
STDERR.puts "Caught error #{e.inspect}"
retval = false
end
if !retval
STDERR.puts "soffice process appears hung. Killing it"
STDERR.puts `killall soffice.bin`
sleep 5
STDERR.puts `killall -9 soffice.bin`
end
end
看起來工作正常。
0
問題可能與soffice多發線程, 所以解決伎倆可能是這樣的:
- 使用unoconv作爲一種服務。
- 創建一個init.d腳本並作爲守護進程啓動。
- 因此,unoconv作爲一項服務將不會運行單個並維護它,而不是unoconv調用soffice啓動。
- 開始創建過程文件,如下所示:
/bin/sh的
情況下, 「$ 1」
開始)
在/ usr/bin中/ unoconv --listener &
;;
停止)
killall soffice.bin
;;
重啓)
killall soffice.bin
睡眠1
的/ usr /斌/ unoconv --listener &
;;
esac
相關問題
- 1. 如何檢測殺死進程事件
- 2. 如何在殺死一個php腳本時殺死passthru進程?
- 3. 如何殺死一個進程?
- 4. 如何殺死一個web進程
- 5. 如何殺死一個C#進程?
- 6. 如何殺死一個子進程
- 7. 如何殺死一個服務進程?
- 8. 殺死一個python進程
- 9. 殺死一個mpi進程
- 10. 殺死進程殺死其他進程
- 11. 殺死另一個進程的線程
- 12. 如何殺死nohup進程?
- 13. 在C中殺死一個pthread而不殺死整個進程
- 14. android如何殺死一個進程或應用程序並檢測一些應用程序再次啓動
- 15. 如何殺死STIME的一個Linux進程(dangling svnserve進程)
- 16. 當Android殺死一個AsyncTask時檢測
- 17. Linux:如何檢測消耗最大內存並殺死它的進程?
- 18. 殺死進程
- 19. 殺死進程
- 20. 殺死進程
- 21. 殺死一個進程並等待進程退出
- 22. 開始一個新進程並殺死當前進程
- 23. 高級任務殺手如何殺死一個進程?
- 24. 如何殺死多個進程
- 25. 殺死一個懸掛的子進程
- 26. 如何從其他進程中殺死一個進程?
- 27. 殺死一個配置單元進程並不會殺死hadoop作業
- 28. 檢測會話掛起並殺死它
- 29. 如何殺死Linux中沒有被殺死的進程
- 30. 殺死不會殺死進程