如何检测并杀死楔入的 soffice.bin 进程?
Posted
技术标签:
【中文标题】如何检测并杀死楔入的 soffice.bin 进程?【英文标题】:How to detect and kill a wedged soffice.bin process? 【发布时间】:2012-12-06 21:17:32 【问题描述】:我使用 libreoffice/openoffice 作为无头进程来处理我通过 unoconv “提交”的服务器上的一些文档转换任务。有时,实际完成工作的进程 soffice.bin 似乎被卡住了。我尝试使用 strace 并看到在启动新的 unoconv 实例时,它们仍然连接并与 soffice 进程对话,只是在“坏”文档进入后没有其他任何事情发生。如果它只是检测到那个 soffice不再与传入的套接字对话,编写看门狗很容易。但这显然不是那么简单。任何想法如何判断事情何时发生?
【问题讨论】:
【参考方案1】:这是我设置为 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
似乎工作正常。
【讨论】:
【参考方案2】:问题可能与 soffice 多线程有关, 所以解决技巧可能是这样的:
-
将 unoconv 用作服务。
创建一个 init.d 脚本并作为一个守护进程启动。
因此,unoconv 不会调用 soffice 来启动,而是将 unoconv 作为服务继续运行并维护它。
创建启动进程文件如下:
!/bin/sh
案例“$1”
开始)
/usr/bin/unoconv --listener &
;;
停止)
killall soffice.bin
;;
重启)
killall soffice.bin
睡眠 1
/usr/bin/unoconv --listener &
;;
esac
【讨论】:
以上是关于如何检测并杀死楔入的 soffice.bin 进程?的主要内容,如果未能解决你的问题,请参考以下文章