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)
如果进程已经运行,则终止该进程.它解决了杀死旧流程的目的,但没有让新流程开始.原因很明显,我后来才明白.
这样做的正确方法是什么?
典型的方法是使用基于文件系统的锁定策略:
该脚本创建一个锁定文件(/var/lock/subsystem/...),其中包含自己的进程号作为内容.启动时,它首先检查此类文件是否已存在.如果没有,一切都很好.但如果是这样,那么它会从文件中读取进程号并使用它来检查进程表.如果这样的过程仍然存在,那么它可以退出(通常的行为),或者它可以通过发送SIG-TERM信号来终止该过程(你要求的).