Bash脚本,通过从PID文件中提取来终止进程

时间:2012-07-26 15:26:01

标签: linux bash shell glassfish pid

这就是我现在在bash脚本中所拥有的:

ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9

问题在于,如果有其他人登录并拉动与glassfish相关的东西,那么它也会拉动该PID。从而导致杀死错误的PID。

所以我的问题是如何修复我只需要提取正确的PID,以及如何重写它以从glassfish生成的PID文件中提取PID。

2 个答案:

答案 0 :(得分:17)

编辑启动glassfish的脚本,并在紧随其后的行上放置类似echo $$ > /path/to/PID-file的内容(这可以包含~用于主目录或其他一些机制,如$USER以使用户特定)开始这个过程的线。然后,您可以使用kill $(cat /path/to/PID-file)终止正确的流程。

答案 1 :(得分:0)

ps aux | grep ^$USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9

下面我错误地使用了ps开关,所以grep以上应该没问题。


啊它不起作用,ps可以像ps -ao pid,tty,comm -u $USER一样使用,上面这个grep应该没问题......

  

其他人已登录...

如果是,请添加开关-u

ps aux -u $USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9

$ USER是将被选中和列出的用户名,默认情况下应该已在OS环境中设置。可以通过逗号ps aux -u root,$USER

选择多个用户

请注意:如果系统中没有特定的用户名,ps将抛出错误:用户名不存在。 < / p>

阅读man ps了解更多信息。

<击>   

-u userlist 按有效用户ID(EUID)或名称选择。                   这将选择其有效用户名或ID在用户列表中的进程。有效用户ID描述其用户   进程使用文件访问权限(请参阅geteuid(2))。   相同                   到U和--user。