0
我最常做的是暂停我的脚本,在后台运行,然后否认它像如何运行shell脚本与终端关闭,在任何时间停止脚本
./script
^Z
bg
disown
然而,我希望能够随时取消我的脚本。如果我有一个无限期运行的脚本,我希望能够在几个小时或一天后或取消它时取消它。
我最常做的是暂停我的脚本,在后台运行,然后否认它像如何运行shell脚本与终端关闭,在任何时间停止脚本
./script
^Z
bg
disown
然而,我希望能够随时取消我的脚本。如果我有一个无限期运行的脚本,我希望能够在几个小时或一天后或取消它时取消它。
既然您遇到了一些麻烦,那么让我们来看看我们是否可以保持简单。 (这假设你可以写入/tmp
,根据需要更改)。让我们在后台启动脚本,并创建一个包含其进程PID
的PID
文件。
$ ./script & echo $! > /tmp/scriptPID
可以检查/tmp/scriptPID
$ cat /tmp/scriptPID
######
内容在哪里######
是运行./script
进程的PID号。您可以进一步确认pidof script
(将返回相同的######
)。您也可以使用ps aux | grep script
查看该号码。
当您准备好杀死./script
进程时,只需将该号码(例如######
)传递至kill
即可。您可以直接做到这一点:
$ kill $(</tmp/scriptPID)
(或在我的评论中列出的其他方法)
您可以添加rm /tmp/scriptPID
查杀过程后删除pid文件。
看看,让我知道你是否还有其他问题。
一种方法 - 将'PID'写入'/ tmp'目录中的文件中,或者写入'/ usr/local/run'目录。然后当你想停止进程时,你可以简单地'杀死$( path/to/pidfile)'。 –
你能解释一下这一点吗?我如何将pid写入文件? path/to/pidfile究竟是什么?你有一个例子吗? – Jacob
'./script && echo $! >/path/to/pidfile'特殊变量'$!'保存最后一个进程启动时的'PID'(*进程ID *)。所以你把'PID'保存到一个文件中,然后你可以通过发出'kill PID'来随时终止进程。您也可以使用'pidfile'来验证'script'的一个实例正在运行。在脚本终止时,您可以将'trap'添加到'script'以删除'/ path/to/pidfile'。 (每个StackOverflow上有很多示例) –