例如,
#!/bin/bash
while :
do
sl
done
如何终止这个bash脚本?
ctrl-c
以发送SIGINT
信号(在大多数外壳中),也可以按ctrl-z
以发送SIGTSTP
信号(在大多数外壳中)。在您按下的情况下ctrl-z
,相关进程不会被杀死,而是会暂停。您可以使用fg
(至少在中bash
)恢复它
例如,
#!/bin/bash
while :
do
sl
done
如何终止这个bash脚本?
ctrl-c
以发送SIGINT
信号(在大多数外壳中),也可以按ctrl-z
以发送SIGTSTP
信号(在大多数外壳中)。在您按下的情况下ctrl-z
,相关进程不会被杀死,而是会暂停。您可以使用fg
(至少在中bash
)恢复它
Answers:
该程序sl
故意忽略SIGINT
,这是您按时发送的内容Ctrl+C。因此,首先,您需要通过添加参数来告知sl
不要忽略。SIGINT
-e
如果尝试这样做,您会注意到您可以停止每个人sl
,但他们仍然会重复。您还需要告知bash
退出SIGINT
。您可以通过trap "exit" INT
在循环之前放置a来实现。
#!/bin/bash
trap "exit" INT
while :
do
sl -e
done
Ctrl-Z
以暂停脚本kill %%
在%%
讲述内置的bash kill
要的信号(默认SIGTERM)发送到最近中止的后台任务在当前shell,而不是一个进程ID。
您也可以按编号或名称指定作业。例如,当您使用^ Z暂停作业时,bash会使用诸如告诉您其作业编号是什么[n]+ Stopped
,其中n
方括号内是作业编号。
有关作业控制和杀灭工作的详细信息,运行help jobs
,help fg
,help bg
,和help kill
在bash,和搜索JOB CONTROL
(全部大写),或jobspec
在bash的手册页。
例如
$ ./killme.sh ./killme.sh:第4行:sl:找不到命令 ./killme.sh:第4行:sl:找不到命令 ./killme.sh:第4行:sl:找不到命令 ./killme.sh:第4行:sl:找不到命令 ./killme.sh:第4行:sl:找不到命令 ... ... ... ./killme.sh:第4行:sl:找不到命令 ^ Z [1] +已停止./killme.sh $杀死%% $ [1] +已终止./killme.sh
在此示例中,工作编号为1,因此kill %1
其工作方式与kill %%
(注意:我没有sl
安装,所以输出只是“找不到命令”。在您的情况下,您将获得sl产生的任何输出。这并不重要- ^Z
暂停并kill %%
可以正常工作)
sl
正在循环中运行的程序(),但脚本将继续运行...并启动另一个sl
。如果确实快按几次^ C,则可能会同时杀死sl
和和脚本(如果它们都不捕获SIGINT)。^ Z几乎会立即挂起脚本(如果您不计算仍在打印到终端的缓冲输出,则将立即挂起),因此可以使用kill %%
sl
是一个有趣的程序”。这次,再次让我开心!@ _ @
The symbols %% and %+ refer to the shell's notion of the current job, which is the last job stopped while it was in the foreground or started in the background. The previous job may be referenced using %-. If there is only a single job, %+ and %- can both be used to refer to that job
您可以通过在启动该脚本的终端上按Ctrl + C来终止该脚本。当然,此脚本必须在前台运行,以便您可以通过Ctrl + C停止它。
或者,您可以通过以下方式在其他打开的终端中找到该脚本的PID(进程ID):
ps -ef | grep <name_of_the_script>
kill -9 <pid_of_your_running_script>
两种方法都可以满足您的要求。
while [ true ]
do
#check if script is running
ps | grep script_name.sh | grep -v grep >/dev/null 2>&1
if [ "$!" != "0" ] ; then
break
else
kill -9 ` ps -ef | grep script_name.sh | cut -d "a" -f 1`
echo "kill -9 `get script PID`"
fi
done
这应该有所帮助。