所以我想启动一个 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`
关于bash - 如何在完成执行后终止由 bash 脚本启动的后台进程/作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63960423/