$MAINPID is a systemd variable for your service that points to the PID of the main application.
$ MAINPID是服务的systemd变量,它指向主应用程序的PID。
ExecReload=
这是一个可选的指令, 用于设置当该服务 被要求重新载入配置时 所执行的命令行。 语法规则与 ExecStart= 完全相同。
另外,还有一个特殊的环境变量 $MAINPID 可用于表示主进程的PID, 例如可以这样使用:
ExecReload=/bin/kill -HUP $MAINPID
注意,像上例那样,通过向守护进程发送复位信号, 强制其重新加载配置文件,并不是一个好习惯。
因为这是一个异步操作, 所以不适用于需要按照特定顺序重新加载配置文件的服务。
我们强烈建议将 ExecReload= 设为一个 能够确保重新加载配置文件的操作同步完成的命令行。
你应该使用PIDFile和$ MAINPID而不是pkill。
如果由于某种原因多次运行nginx怎么办。 在几个容器中,或作为某些开发人员的本地服务器。 谁知道将获取哪些PID?
但是systemd知道服务的PID,通过$MAINPID变量 为你获取它。
常用信号表
kill与信号量
https://www.jianshu.com/p/966d18eac17e
当执行kill -9 PID时系统发生了什么?
http://zyearn.github.io/blog/2015/03/22/what-happens-when-you-kill-a-process
systemd.service 中文手册
http://www.jinbuguo.com/systemd/systemd.service.html
Systemd Services: Beyond Starting And Stopping
https://www.linux.com/tutorials/systemd-services-beyond-starting-and-stopping
Using PIDFile and $MAINPID instead of pkill
https://medium.com/@jbriggs_24705/you-should-be-using-pidfile-and-mainpid-instead-of-pkill-1935e4531931