13

这就是我现在在 bash 脚本中的内容:

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

这样做的问题是,如果其他人登录并拉取与 glassfish 相关的东西,它也会拉取该 PID。从而导致杀死错误的PID。

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

4

2 回答 2

17

编辑启动 glassfish 的脚本,并在启动进程的行之后的行上放置类似的echo $$ > /path/to/PID-file内容(这可以包含~主目录或其他一些机制,例如$USER使用户特定)。然后,您可以使用kill $(cat /path/to/PID-file).

于 2012-07-26T15:30:37.013 回答
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 是将被选择和列出的用户名,默认情况下应该已经在操作系统环境中设置。可以用逗号选择多个用户ps aux -u root,$USER

注意:如果系统中没有特定的用户名,ps会抛出ERROR: User name does not exist。

阅读man ps更多。

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

于 2012-07-30T20:12:18.780 回答