【发布时间】:2015-02-02 15:48:37
【问题描述】:
我有一个脚本(我们称之为 parent.sh),它对运行 java 进程的第二个脚本(child.sh)进行 2 次调用。 child.sh 脚本通过在 parent.sh 中的行尾放置一个 & 来在后台运行。但是,当我运行 parent.sh 时,我需要按 Ctrl+C 才能返回终端屏幕。这是什么原因?这是否与 child.sh 进程在 parent.sh 进程下运行的事实有关。所以 parent.sh 不会死,直到孩子死?
parent.sh
#!/bin/bash
child.sh param1a param2a &
child.sh param1b param2b &
exit 0
child.sh
#!/bin/bash
java com.test.Main
echo "Main Process Stopped" | mail -s "WARNING-Main Process is down." user@email.com
如您所见,我不想在后台运行 java 进程,因为我想在进程终止时发送邮件。从功能的角度来看,按照上述方式执行此操作很好,但我想知道在执行 parent.sh 后如何让它返回到终端。
【问题讨论】:
-
它需要是 ctrl-c 还是按回车也会给你一个提示?
ps说在你按 ctrl-c 的地方运行的是什么? -
java 程序是否需要任何输入?改成
java com.test.Main < /dev/null会有帮助吗? -
在带有
mail的行尾添加> /dev/null。mail将尝试启动其交互模式。 -
@theGuardian,如果它需要输入,你希望它如何背景化?它必须有一个控制终端句柄。
-
正如@CharlesDuffy 所说,如果脚本接受输入,它如何在后台运行?它将从哪里获得输入?你没有提供任何东西(你用 ctrl-c 杀死它,我希望你实际上必须击中它两次)。
标签: bash shell scripting background-process ampersand