我正在编写一个bash脚本来杀死进程,然后重新启动它。
我正在使用
ps -ef | grep Cp1252
根据文件编码返回进程列表。
根据文件编码查找进程并不理想,因为其他进程也可能有此字符串。
我需要唯一地标识两个进程,但它们具有非常通用的进程名称:
/user/jdk/jdk1.6.0_43/bin/java
我的问题是,有没有办法为进程添加标志或唯一标识符? 或者,有没有其他方法可以解决这个问题?
谢谢, 迪尔
更新
我找到了解决问题的方法,我发现可以使用PPID唯一标识每个进程。与PPID关联的进程的命令名称足够独特,以便我可以告诉什么是正常的Java进程,以及我想要重新启动的是什么。
无论如何,感谢您的帮助,这无疑帮助我缩小了替代方案! :-)
答案 0 :(得分:1)
您可以编写一个帮助程序脚本来启动该过程并将pid记录在一个文件中。只需确保在进程停止时删除文件(可以再次使用包装器完成)。
类似
#!/bin/bash
PIDFILE=/path/to/pid-file
COMMAND=YOUR_PROGRAMM_HERE
# optionally check if pid-file exists
if [ -e ${PIDFILE} ]; then
echo "${PIDFILE} already exists, assuming ${COMMAND} already running"
exit 1;
fi
${COMMAND} &
WAITPID="$!"
echo ${WAITPID} > "${PIDFILE}"
# cleanup on signal
trap "kill ${WAITPID}; rm ${PIDFILE}; exit" SIGINT SIGTERM SIGHUP
# optionally wait for the program to be done
wait ${WAITPID}
rm "${PIDFILE}"
所以要重新启动您的流程,只需从/path/to/pid-file
读取pid并发送相应的信号。
如果你可以修改你运行的进程的源代码,我建议添加一个选项来记录进程本身的pid。