2017-07-20 107 views
0

我最常做的是暂停我的脚本,在后台运行,然后否认它像如何运行shell脚本与终端关闭,在任何时间停止脚本

./script 
^Z 
bg 
disown 

然而,我希望能够随时取消我的脚本。如果我有一个无限期运行的脚本,我希望能够在几个小时或一天后或取消它时取消它。

+0

一种方法 - 将'PID'写入'/ tmp'目录中的文件中,或者写入'/ usr/local/run'目录。然后当你想停止进程时,你可以简单地'杀死$(

+0

你能解释一下这一点吗?我如何将pid写入文件? path/to/pidfile究竟是什么?你有一个例子吗? – Jacob

+0

'./script && echo $! >/path/to/pidfile'特殊变量'$!'保存最后一个进程启动时的'PID'(*进程ID *)。所以你把'PID'保存到一个文件中,然后你可以通过发出'kill PID'来随时终止进程。您也可以使用'pidfile'来验证'script'的一个实例正在运行。在脚本终止时,您可以将'trap'添加到'script'以删除'/ path/to/pidfile'。 (每个StackOverflow上有很多示例) –

回答

0

既然您遇到了一些麻烦,那么让我们来看看我们是否可以保持简单。 (这假设你可以写入/tmp,根据需要更改)。让我们在后台启动脚本,并创建一个包含其进程PIDPID文件。

$ ./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文件。

看看,让我知道你是否还有其他问题。