有没有办法从正在运行的脚本中杀死/退出/关闭VI和ATOM 示例脚本test.sh:
EDITOR1 =六 EDITOR2 =原子
$ EDITOR1 helloWorld.txt $ EDITOR2 file1.txt
杀掉$ EDITOR1 杀死$ EITOR2
是否有任何NOT Set杀死它的方法,我的意思是变量前面的例子是Filename。
答案 0 :(得分:0)
我可以想到两种方式:
按名称杀死进程。
kill `pidof $EDITOR1`
终止上次启动的流程
vi file &
kill $!
&amp ;:在后台启动进程(用于交互式命令行会话)
$!:保存最后执行进程的pid。
答案 1 :(得分:0)
kill不会对任何EDITOR
变量起作用,因为它们都不是作业ID,kill只适用于作业ID或进程ID。运行上面的脚本不会将任何命令放在后台,一旦EDITOR1
执行它就会阻塞整个程序,在$EDITOR1 filename
创建的进程被杀死之前什么也都无法运行。您需要使用&
在后台运行它们所需的目标,当您使用&
时,每次调用&
时都会创建一个JOB ID(增量),您必须找到跟踪JOB IDS的方法。例如,如果您执行$EDITOR1 filename.txt &
;创建了作业ID为1,如果执行$EDITOR2 filename2.txt
,则创建作业ID为2。您的案例
EDITOR1=vi ; EDITOR2=atom
declare -a JOB_ID
declare -i JOB=0;
$EDITOR1 helloword.txt &;
JOB_ID+=( $(( ++JOB )) );
$EDITOR2 file1.txt;
JOB_ID+=( $(( ++JOB )) );
kill ${JOB_ID[0]}; // kills the first job
kill ${JOB_ID[1]}; // kills the second job
或者您可以使用关联数组
EDITOR1=vi ; EDITOR2=atom
declare -A JOB_ID
declare -I JOB=0;
$EDITOR1 helloword.txt &
JOB_ID[$EDITOR1]=$(( ++JOB ));
$EDITOR2 file1.txt &
JOB_ID[$EDITOR2]=$(( ++JOB ));
kill ${JOB_ID[$EDITOR1]}; // kills the first job
kill ${JOB_ID[$EDITOR2]}; // kills the second job
我没有尝试过这个,但它会开始工作
答案 2 :(得分:0)
您可以使用pkill -f <filename>
,如下所示:
[fsilveir@fsilveir ~]$ ps -ef | grep vim
fsilveir 28867 28384 0 00:07 pts/5 00:00:00 vim foo.txt
fsilveir 28870 28456 0 00:07 pts/6 00:00:00 vim bar.txt
[fsilveir@fsilveir ~]$
[fsilveir@fsilveir ~]$ pkill -f bar.txt
[fsilveir@fsilveir ~]$
[fsilveir@fsilveir ~]$ ps -ef | grep vim
fsilveir 22344 11182 0 Mar18 pts/0 00:00:00 vim openfiles.py
fsilveir 28867 28384 0 00:07 pts/5 00:00:00 vim foo.txt
fsilveir 28958 28740 0 00:08 pts/7 00:00:00 grep --color=auto vim
[fsilveir@fsilveir ~]$
答案 3 :(得分:0)
为什么不使用killall
命令,例如:
killall vim
killall atom