Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 启动后台脚本以运行任务,然后退出它_Bash_Shell_Unix - Fatal编程技术网

Bash 启动后台脚本以运行任务,然后退出它

Bash 启动后台脚本以运行任务,然后退出它,bash,shell,unix,Bash,Shell,Unix,我想运行node task.js,需要在task.js之前启动node worker.js。一旦node task.js完成,我想停止node worker.js 现在我已经尝试了双重分叉,比如: (node worker.js &) & node task.js 但是它工作得不太好,worker.js似乎在task.js完成时不会被杀死。此外,task.jsstdout仅在末尾可见 还有一件事,我正在Makefile中运行这个脚本,类似于: task: (node w

我想运行
node task.js
,需要在
task.js
之前启动
node worker.js
。一旦
node task.js
完成,我想停止
node worker.js

现在我已经尝试了双重分叉,比如:

(node worker.js &) & node task.js
但是它工作得不太好,
worker.js
似乎在
task.js
完成时不会被杀死。此外,
task.js
stdout仅在末尾可见

还有一件事,我正在Makefile中运行这个脚本,类似于:

task:
    (node worker.js &) & node task.js

编辑:在接受的答案中,杀死进程的工作命令是pkill-f“node worker.js”

您试图做的有点困难。但你是对的-它不会停止你开始和背景的过程,因为。。。你没有要求

您可以使用
bash
作业控制机制执行此操作-如果您运行
jobs-p
,您应该会看到后台进程及其pid的列表。不幸的是,虽然它可以用于交互式shell,但在shell脚本中却不能很好地工作。幸运的是,
$是否为“上一个进程的pid已启动”:

因此,您需要做的是:

node worker.js &
PID=$!
node task.js
kill $PID
这将在
task.js
完成运行后终止
worker.js
的pid

您可以这样做:

node worker.js &
node task.js
pkill -9 worker.js

pgrep
命令在这里似乎不起作用,进程名是
node worker.js
尝试使用
kill-9
正常
kill
有时会被忽略。那么
pkill-9 node
呢?May be node是worker.js的父进程不是最好的IMHO,因为它会杀死所有的节点进程如果pkill-9 worker.js不工作,不杀死它的父进程就无法杀死它。您可能还想添加一个sleep,然后加上kill-9$PID(如果杀死成功,这将是一个no op,但保证[1]如果它忽略默认的kill,它将被杀死。[1]技术上不正确;在SGI Unix上(我相信Linux,但我只在前者上看到过),如果某个进程安装了NFS并且NFS死机,那么最终可能会出现忽略kill-9的进程……但在这一点上,无论如何,您都有点不知所措。可能,但我不确定我是否喜欢竞争条件的含义。这是指如果第一个kill有效,那么另一个进程可能获得相同的PID,然后获得kill-9吗ignal?我已经考虑过了(从技术上讲,即使是你建议的普通方式,如果工人完成得更快,并且任务持续一段时间,似乎也会有同样的理论顾虑),但请相信,假设PID是按顺序分配的,并且使用至少15位的数字,除非发生了类似无约束叉式炸弹的情况,否则不应该发生这种情况,在这种情况下,请参阅关于使用软管的注释。