gpt4 book ai didi

bash - 如何在完成执行后终止由 bash 脚本启动的后台进程/作业?

转载 作者:行者123 更新时间:2023-12-04 19:08:07 26 4
gpt4 key购买 nike

所以我想启动一个 docker 镜像,然后是一个 Django 后端,最后是一个 Angular 前端,只要我需要进行测试/开发,就让它们运行,然后在我完成后杀死它们。为此,我首先尝试在脚本中启动它们并让它们在后台运行,然后让第二个脚本执行 kill %n对于这两个过程。这不起作用,因为后台进程位于另一个上下文中,因此第二个脚本无法引用它们。
然后我尝试了这个:

#!/bin/bash
# Exit Angular, Django and kill docker_img
function clean_up()
{
echo "Exiting..."
kill %2
kill %1
docker stop docker_img
reset
exit
}

# Trigger cleanup on CTRL + C
trap clean_up SIGINT

# Start docker database
docker start docker_img

# Start django backend
cd ~/Projects/DjangoBackend
source venv/bin/activate
python src/manage.py runserver &
sleep 3
echo 'Done starting django, starting angular'
sleep 1

# Start angular front end
cd ~/Projects/AngularFront
npm start &
但是,在 npm start & 之后运行时,陷阱停止工作,因此它实际上变得无用。我猜这可能是因为一旦我的脚本运行完毕,陷阱就不再事件了,但我不知道如何解决这个问题。我能做些什么?

最佳答案

如果你想在 unix/linux 中杀死一个进程,一种方法是你可以使用 ps -ef 命令将它们的 PID 记录在一个文件中。
然后使用 kill -9 杀死进程。
例子:

$ ps -ef | grep <process_name> | awk -F ' ' '{print $2}' > pid.txt
$ kill -9 `cat pid.txt`
  • ps -ef 命令会给出所有正在运行的进程,使用grep和进程名,可以得到特定进程的PID
  • awk 用于从上述命令
  • 中仅提取 PID
  • kill -9 将强制终止进程
  • 关于bash - 如何在完成执行后终止由 bash 脚本启动的后台进程/作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63960423/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com