Node.js 如何停止bash脚本中的上一个命令?

Node.js 如何停止bash脚本中的上一个命令?,node.js,bash,Node.js,Bash,我试图构建一个bash脚本,在web服务器上运行单元测试 我希望运行一个简单的bash脚本,该脚本可以(例如)在一个makefile中执行以下操作: 启动web服务器 运行单元测试 停止web服务器 假设web服务器是为NodeJS编写的,下面是它的外观: npm start & sleep 5 npm test 这种方法的问题是web服务器将继续运行。如何在npm测试阶段后停止它?上次启动的后台进程的PID存储在$!,因此,在启动npm后将其拾取,并在需要时将其杀死: npm sta

我试图构建一个bash脚本,在web服务器上运行单元测试

我希望运行一个简单的bash脚本,该脚本可以(例如)在一个makefile中执行以下操作:

  • 启动web服务器
  • 运行单元测试
  • 停止web服务器
  • 假设web服务器是为NodeJS编写的,下面是它的外观:

    npm start &
    sleep 5
    npm test
    

    这种方法的问题是web服务器将继续运行。如何在
    npm测试
    阶段后停止它?

    上次启动的后台进程的PID存储在$!,因此,在启动npm后将其拾取,并在需要时将其杀死:

    npm start &
    npm_pid=$!
    ...
    kill $npm_pid
    

    上次启动的后台进程的PID存储在$!,因此,在启动npm后将其拾取,并在需要时将其杀死:

    npm start &
    npm_pid=$!
    ...
    kill $npm_pid
    
    也许是一个复制品

    也许是一个复制品


    你可以考虑在屏幕上运行这个过程。

    screen -dmS npm npm start #Starts a detached screen named npm, and runs "npm start" inside
    
    稍后,当您需要终止进程时,您可以终止屏幕。当屏幕消失时,它将带上它的子进程

    screen -X -S npm quit
    

    你可以考虑在屏幕上运行这个过程。

    screen -dmS npm npm start #Starts a detached screen named npm, and runs "npm start" inside
    
    稍后,当您需要终止进程时,您可以终止屏幕。当屏幕消失时,它将带上它的子进程

    screen -X -S npm quit
    

    您是否考虑过使用
    killall
    ?这不是一个真正的选项。如果我理解正确,
    killall
    将删除与指定关键字匹配的所有已处理内容。如果这是正确的,试图杀死我的后台进程可能会杀死其他我希望保持不变的进程。如果这不是
    killall
    所做的,请纠正我:)这正是
    killall
    所做的。只要这是npm运行的唯一实例,就可以了。您是否考虑过使用
    killall
    ?这不是一个真正的选项。如果我理解正确,
    killall
    将删除与指定关键字匹配的所有已处理内容。如果这是正确的,试图杀死我的后台进程可能会杀死其他我希望保持不变的进程。如果这不是
    killall
    所做的,请纠正我:)这正是
    killall
    所做的。只要这是npm运行的唯一实例,一个就可以了可能吗?@andlrc:哎哟,当然,谢谢。如果我看了标题,我就不会发现其他问题,但我完全理解重复的标志。不管怎样,非常感谢您的回答!:)你想要
    $可能吗?@andlrc:哎哟,当然,谢谢。如果我看了标题,我就不会发现其他问题,但我完全理解重复的标志。不管怎样,非常感谢您的回答!:)不要c/p StackOverflow的另一个答案,改为标记为重复。不要c/p StackOverflow的另一个答案,改为标记为重复。与我预期的完全不同。我将在
    屏幕上阅读
    。谢谢和我想象的完全不同。我将在
    屏幕上阅读
    。谢谢