如何在终端关闭的情况下运行shell脚本,并随时停止脚本

时间:2017-07-20 01:22:15

标签: shell scripting

我通常做的是暂停我的脚本,在后台运行它,然后像

那样取消它
 for (_, data) in jsonResponse["data"].dictionaryValue{
    if data["id"] != nil && data["name"] != nil{
      let school = School(id: data["id"].int!, name: data["name"].string!)
           self.arraySchools.append(school)
    }
 }

但是,我希望能够随时取消我的脚本。如果我有一个无限期运行的脚本,我希望能够在几小时或一天之后或者当我想要取消它时取消它。

1 个答案:

答案 0 :(得分:0)

由于您遇到了一些麻烦,让我们看看我们是否可以为您保持简单。 (这假设您可以写入/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文件。

仔细看看,如果您有任何其他问题,请告诉我。