杀死较旧的进程(如果存在)后启动新进程

Sha*_*mar 1 linux bash shell terminate

我有一个shell脚本,我需要经常启动.我可以设置快捷方式(我用来启动)但不要终止.我需要按Ctrl + C来终止它.结果有时最终会打开许多​​进程.

所以我想要做的是在脚本中添加一些命令,检查脚本中的旧进程是否存在并将其终止然后启动新进程.

为了让我的要求更加清晰,我试着追随

说运行脚本是/home/user/runscript.sh.
ps aux | grep runscript.sh给我

user+  6135  0.0  0.0  16620  1492 ?        S    18:28   0:00 /home/user/runscript.sh
user+  6208  0.0  0.0  15936   952 pts/6    R+   18:28   0:00 grep --color=auto runscript.sh
Run Code Online (Sandbox Code Playgroud)

我在脚本中添加了以下内容

pkill -f runscript.sh
Run Code Online (Sandbox Code Playgroud)

如果进程已经运行,则终止该进程.它解决了杀死旧流程的目的,但没有让新流程开始.原因很明显,我后来才明白.

这样做的正确方法是什么?

ark*_*cha 7

典型的方法是使用基于文件系统的锁定策略:

该脚本创建一个锁定文件(/var/lock/subsystem/...),其中包含自己的进程号作为内容.启动时,它首先检查此类文件是否已存在.如果没有,一切都很好.但如果是这样,那么它会从文件中读取进程号并使用它来检查进程表.如果这样的过程仍然存在,那么它可以退出(通常的行为),或者它可以通过发送SIG-TERM信号来终止该过程(你要求的).