我经常使用bash
Shell脚本为许多不同的文件运行简单的命令。例如,假设我有以下bash
的shell脚本,叫script.sh
,运行程序/命令foo
三个文本文件"a.txt"
,"b.txt"
,"c.txt"
:
#!/bin/bash
for strname in "a" "b" "c"
do
foo $strname".txt"
done
另外,假设foo $strname".txt"
速度很慢,那么脚本的执行将花费很长时间(例如,数小时或数天)。nohup
因此,即使终端处于关闭或断开状态,我也要使用继续执行。我还希望脚本立即转到后台,因此我将使用&
运算符。因此,我将使用以下命令来调用script.sh
:
nohup bash script.sh &
这对于在后台运行脚本且没有挂断效果很好,但是现在假设我出于某种原因希望在某个时候终止执行。我怎样才能做到这一点?
我遇到的问题是,通过查看top
,我只能看到与foo
相对应的"a.txt"
。我可以终止该foo
调用,但是要调用的foo
对应对象,然后也必须终止该调用,"b.txt"
依此类推。对于for
循环中指定的数十或数百个文本文件foo
,一个接一个地终止是很痛苦的!因此,我需要以某种方式终止shell脚本本身,而不是终止从shell脚本发出的特定调用。
当我键入命令
ps -u myusername
myusername
我的用户名在哪里,我会得到一个正在运行的进程的列表。但是我看到了两个不同的进程ID bash
。我如何知道这些过程中的哪一个(如果有的话)与我的原始呼叫相对应nohup bash script.sh &
?
for s in a b c; do foo "$s".txt; done
nohup
您提出一个流程清单来查看您开始的工作时,这已经很久了。您可以查看输出中的“ niceness”列,ps
但此处的答案更有用。