唯一标识unix进程

时间:2014-08-29 15:33:16

标签: bash unix

我正在编写一个bash脚本来杀死进程,然后重新启动它。

我正在使用

    ps -ef | grep Cp1252

根据文件编码返回进程列表。

根据文件编码查找进程并不理想,因为其他进程也可能有此字符串。

我需要唯一地标识两个进程,但它们具有非常通用的进程名称:

/user/jdk/jdk1.6.0_43/bin/java

我的问题是,有没有办法为进程添加标志或唯一标识符? 或者,有没有其他方法可以解决这个问题?

谢谢, 迪尔

更新

我找到了解决问题的方法,我发现可以使用PPID唯一标识每个进程。与PPID关联的进程的命令名称足够独特,以便我可以告诉什么是正常的Java进程,以及我想要重新启动的是什么。

无论如何,感谢您的帮助,这无疑帮助我缩小了替代方案! :-)

1 个答案:

答案 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。