Bash - Exit parent script from child script

2020-02-10 03:55发布

I have a Bash parent script that on unexpected input calls an error logging child script that logs the error. I also want the execution to halt when the error occurs and the error script is called. But if I call exit from the error handling script it does not stop the parent script from executing. How may I go about stopping a parent script from a child?

标签: bash
4条回答
做个烂人
2楼-- · 2020-02-10 04:35

Extension to @anishsane comment because MacOS has little bit different ps syntax.

Finding parent process ID (ppid) in child script under Mac OS (Darwin):

kill -SIGUSR1 $(ps $$ -o ppid=);exit

查看更多
走好不送
3楼-- · 2020-02-10 04:39

Try:

In parent script:

trap "echo exitting because my child killed me.>&2;exit" SIGUSR1

In child script:

kill -SIGUSR1 `ps --pid $$ -oppid=`; exit

Other way was:

In child script:

kill -9 `ps --pid $$ -oppid=`; exit

But, it is not recommended, because the parent needs to have some information about getting killed & thus do some cleanup if required.


Another way: Instead of calling the child script, exec it.


However, as pointed out in other answer, the cleanest way is to exit from parent, after the child returns.

查看更多
4楼-- · 2020-02-10 04:48

try..

#normal flow
[[ $(check_error_condition ]] && /some/error_reporter.sh || exit 1

so,

  • when the error_reporter will exit with exit status > 0 the parent will terminate too
  • if the error_reporter will exit with status = 0 the parent continues...

You don't want stop the parent from a child (the parents usually don't like this behavior) :), you instead want tell to parent - need stop and he will stop itself (if want) ;)

查看更多
贪生不怕死
5楼-- · 2020-02-10 04:48

Don't try to terminate the parent from the child. Instead call exit in the parent after the child script returned.

if [ condition ]; then
  /path/to/child.sh
  exit 1
fi

or shorter

[ condition ] && { /path/to/child.sh; exit 1; }
查看更多
登录 后发表回答