centos pkill不终止进程

8fq7wneg  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(184)

我运行了一个名为productivity的进程

[root@productivity ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1009514/sshd        
tcp6       0      0 :::8443                 :::*                    LISTEN      2803472/productivit 
tcp6       0      0 :::443                  :::*                    LISTEN      1017657/httpd       
tcp6       0      0 :::80                   :::*                    LISTEN      1017657/httpd       
tcp6       0      0 :::22                   :::*                    LISTEN      1009514/sshd        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           1009281/chronyd     
udp6       0      0 ::1:323                 :::*                                1009281/chronyd

我定期重新启动服务以续订Let's Encrypt证书

[root@productivity ~]# cat restart-productivity.sh 

# !/bin/sh

pkill "productivity"
bash -c "exec -a productivity java -jar productivity.jar -Dkeystore.location=./ssl/productivity.to.keystore . & disown &"

这几个月来一直很有效。现在,即使我手动运行pkill productivity,服务也不会被终止。我只能通过调用kill PID来终止服务。这确实有效,但对自动化毫无用处。
我在CentOS 8上运行,我不知道为什么它停止工作了。有人能帮我吗?
更新

[root@productivity ecommerce]# ps aux | grep productivity
root     2803472  1.3 10.3 2648228 204168 pts/1  Sl   20:24   0:21 productivity -jar productivity.jar -Dkeystore.location=./ssl/productivity.to.keystore .
root     2803848  0.0  0.0  11800  1152 pts/1    S+   20:49   0:00 grep --color=auto productivity
hmmo2u0o

hmmo2u0o1#

我使用kill来发送SIGTERM到大多数进程。我不再使用pkill了,相反我更喜欢pgrepkill的组合...

pgrep -io "PROCESSNAME" | xargs kill

-i用于检查是否不区分大小写,-o仅用于输出第一个进程ID。
你可以在你的~/.bashrc_aliases中使用这个作为alias,或者在你的~/.bashrc中直接使用。例如,我用它来杀死不和谐,因为它不会自己停止。

alias kill_discord='pgrep -io discord | xargs kill'

只要我的20美分。

更新

终止进程的经验法则。
1.SIGTERM正在尝试以正常方式关闭进程。
1.当SIGTERM不起作用时,您可以尝试SIGINT。这是一个类似于 CTRL-C 的中断。
1.如果这两个信号都不起作用,你可以尝试SIGHUB。2这个信号在关闭终端时被发送给进程。3守护进程将重新加载它们的配置文件。
1.最后但并非最不重要的是SIGKILL。这将杀死任何进程,无论它是什么,它应该只在进程不再响应时使用。

kill {-2|-INT|-SIGINT|-s 2|-s INT|-s SIGINT|--signal 2|--signal INT|--signal SIGINT} [PID]
kill {-1|-HUB|-SIGHUB|-s 1|-s HUB|-s SIGHUB|--signal 1|--signal HUB|--signal SIGHUB} [PID]
kill {-9|-KILL|-SIGKILL|-s 9|-s KILL|-s SIGKILL|--signal 9|--signal KILL|--singal SIGKILL} [PID]
xnifntxz

xnifntxz2#

最后对我有效的解决方案是


# !/bin/sh

PID=`pidof productivity`
kill $PID
bash -c "exec -a productivity java -jar productivity.jar . & disown &"

相关问题