目前我在bash脚本中有以下代码:
ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9
这样做的问题在于,如果有其他人登录并拉取与GlassFish相关的内容,它也会拉取那个PID,导致杀死错误的PID。所以我的问题是如何修复我现在的方法只拉取正确的PID,并且如何重写它以从GlassFish生成的PID文件中提取PID。
目前我在bash脚本中有以下代码:
ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9
这样做的问题在于,如果有其他人登录并拉取与GlassFish相关的内容,它也会拉取那个PID,导致杀死错误的PID。编辑启动Glassfish的脚本,并在启动进程的行后面放置类似于 echo $$ > /path/to/PID-file
的内容(这可以包含~
来表示主目录或其他机制,比如$USER
以使其与用户相关)。然后你就可以使用 kill $(cat /path/to/PID-file)
来关闭正确的进程。
less
会更好一些,那也可以替换掉cat,但是 $(< file)
会让绝大部分新手感到困惑。 - Valaps 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位于userlist中的进程。有效用户ID描述了进程使用其文件访问权限的用户(请参见geteuid(2))。与U和--user相同。