gpt4 book ai didi

bash - bash 脚本如何对后台任务执行相当于 Ctrl-C 的操作?

转载 作者:行者123 更新时间:2023-11-29 08:52:21 25 4
gpt4 key购买 nike

有没有什么方法可以调用一个子进程,以便它和它的所有后代都被发送一个中断,就像你按 Ctrl-C 组合一个前台任务一样?我正在尝试终止调用长时间运行的子进程的启动器脚本。我试过 kill -SIGINT $child (它不会向其后代发送中断,所以是一个空操作)和 kill -SIGINT -$child (它在交互调用时有效,但在脚本中运行时无效。

这是一个测试脚本。长时间运行的脚本是 test.sh --child。当您调用 test.sh --parent 时,它会调用 test.sh --child & 然后尝试终止它。怎样才能让 parent 成功杀死 child ?

#!/bin/bash

if [ "$1" = "--child" ]; then
sleep 1000

elif [ "$1" = "--parent" ]; then
"$0" --child &
for child in $(jobs -p); do
echo kill -SIGINT "-$child" && kill -SIGINT "-$child"
done
wait $(jobs -p)

else
echo "Must be invoked with --child or --parent."
fi

我知道你可以修改长时间运行的子进程来trap信号,将它们发送到它的子进程,然后等待(从 Bash script kill background (grand)children on Ctrl+C ), 但有没有办法不修改子脚本呢?

最佳答案

对于任何想知道的人,这就是你如何在后台启动 child 并按 ctrl+c 杀死他们:

#!/usr/bin/env bash
command1 &
pid[0]=$!
command2 &
pid[1]=$!
trap "kill ${pid[0]} ${pid[1]}; exit 1" INT
wait

关于bash - bash 脚本如何对后台任务执行相当于 Ctrl-C 的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696427/

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