2017-03-08 119 views
0

我已经把一个程序写入了一个服务,并且我有一个bash脚本运行来启动实际的程序,因为有些东西必须以特定的顺序启动。启动脚本(从的init.d脚本调用start-stop-daemon的内容是这样的:如何处理停止我的服务?

./rfid_reader & 
sleep 2 
java ReaderClass & 

这工作得很好,但我怎样去杀死他们,当谈到时间停止进程 我”?有没有看过pidfiles,我只是得到这两个程序的PID,将它们写入一个文件,然后在关闭它们时关闭它们,还是必须要ps -ef | grep program才能获得它们的PID?

+0

'pid1 = $(pidof program_name)&& pid2 = $(pidof other_name)&& kill $ pid1 $ pid2'?或者只是'kill $(pidof program_name)$(pidof other_name)' –

+0

这些工作,我认为有一个标准的方法,我猜这是标准方式 –

+0

标准是调用相同的'/ etc/rc.d/initfile stop'你习惯了'/etc/rc.d/initfile start'这个守护进程(或'systemctl stop prog_name'来调用'systemd'世界中的停止服务) –

回答

2

我不认为killall是一个很好的做法。您最好在某个文件(例如PID_FILE)中记录在后台启动的程序的PID,然后kill $(<$PID_FILE)将其停止。

请参阅this thread了解如何获取上一次启动的背景程序PID

+0

我想这将是最好的解决方案,谢谢! –

+0

@BrydonGibson很高兴能帮到:-) – shizhz

+0

除了''UUOC'(不必要使用'cat')可以用'kill $(<$ PID_FILE)' –

0

假设你知道你的程序的名称,你可以杀死他们如下:

killall -KILL program_name 
+0

'-KILL'?真?这是你在森林中的正常习惯吗? –

+0

为了避免混淆,可能需要明确指出'program'是'program_name'。 –

+0

是的,program_name也可以,因为Brydon最初声明 ps -ef | grep程序 为了一致性,我想重复一遍 – Frederic