我有一个脚本,需要执行许多连续步骤,其中一些步骤被写入一些子脚本中。子脚本仅按顺序运行。
- 有没有办法停止正在等待子脚本退出状态的已运行父进程/脚本?
- 有没有办法使用父进程/脚本的 ppid 执行脚本?
- 有没有办法将子脚本的退出状态传递给已经运行但正在等待的父脚本?
假设一个子进程/脚本已经失效或者它将执行一些需要修改的步骤。这样我就可以在后台运行修改后的子脚本,停止父脚本,然后我可以杀死原始子脚本并继续父脚本,同时将成功代码传递给父脚本。我打算在父脚本已经开始执行之后执行上述过程。
如果我杀死子脚本,父脚本就会失败。因此,我要么必须编辑父脚本并重新运行,要么在撤消父脚本之前完成的处理后再次执行父脚本的所有步骤。它非常耗时。
答案1
- 问题一:
#!/bin/bash
echo "I am the parent process and will launch a child and wait until it's finished"
/path/to/child.sh
echo "The child has finished and it's exitstatus is: $?"
问题2:理论上这是不可能的。在实践中,您会模仿这种行为。如果您分叉并将子级视为父级,将父级视为子级,那么“新父级”将具有“旧父级”的 PPID
$?
问题 3:子进程的退出状态(在 bash 和大多数 shell 中)最终会出现在父进程的var 中。请参阅我对问题 1 的回答中的脚本。