我试图找到一种执行块的方法,就像执行调用外部脚本的代码一样。
让我举例说明......
# caller.sh
!#/bin/bash
/soft/executer.sh &
执行“caller.sh”后,“ps”命令返回类似于:
PID TTY TIME CMD
19566 pts/7 00:00:00 bash
22689 pts/7 00:00:00 executer.sh
22694 pts/7 00:00:00 ps
但如果改变调用脚本“caller.sh”的方式如下:
# caller.sh
!#/bin/bash
{
/soft/executer.sh
} &
“ps”命令显示两个命令(caller.sh和executer.sh)
PID TTY TIME CMD
19566 pts/7 00:00:00 bash
22689 pts/7 00:00:00 caller.sh
22694 pts/7 00:00:00 ps
22685 pts/7 00:00:00 executer.sh
“caller.sh”和“ler.sh”命令都出现了。
我知道我可以简单地使用第一个选项来调用它,但这只是一个简单的例子,询问如何在第二个使用块的示例中取消进程“caller.sh”和“execute.sh”
由于
答案 0 :(得分:1)
我会在caller.sh中尝试这个:
#!/bin/bash
(
exec /soft/executer.sh
)&
问题是块或子shell只是父级的副本,这意味着父级可能已经消失,但子级具有相同的名称因此显示在ps中。所以,如果你有:
#!/bin/bash
(
/soft/executer.sh
)&
sleep 60
您将看到两个caller.sh(父级和子级)副本。父母正在睡觉,孩子正在等待executer.sh完成。