【问题标题】:Running Child Process In Sequential Statement Before Exiting Parent?在退出父进程之前在顺序语句中运行子进程?
【发布时间】:2018-06-26 04:10:12
【问题描述】:

我正在尝试编写一个 Bash 脚本,当它接收到 SIGINT 信号时,会在退出之前创建自身的副本。因此,当用户尝试使用 SIGINT 信号终止此脚本时,会重新出现该进程的副本。

trap "echo Exiting...?; ./ghoul.sh; exit 1" SIGINT 

while : 
    do
    echo Process Number $$, with PPID $PPID!
    sleep 1
done

但是,每当我暂停进程并检查ps -f 时,脚本都有多个进程(子进程和子进程的子进程)。 exit 命令似乎永远不会运行,因为它正在等待孩子退出。我想找到一种方法在trap 语句中运行脚本并在之后退出,同时保持生成的子进程。除了将孩子创建为后台进程之外,还有什么方法可以做到这一点?

【问题讨论】:

    标签: bash unix sh


    【解决方案1】:

    我发现将退出代码放入函数中要简单得多。例如,您的未引用回声包含一个裸露的?,它是一个 glob(文件扩展)字符。为了避免父母杀死孩子,您可以使用disown,是的,您需要在后台运行它。

    试试这个:

    f_exit() {
        echo 'Exiting...?'
        ./ghoul.sh &
        disown -h %1
        exit 1
    }
    trap "f_exit" SIGINT
    
    while :
        do
        echo "Process Number $$, with PPID $PPID!"
        sleep 1
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      相关资源
      最近更新 更多