0

我试图找到一种方法来执行块,就像我执行调用外部脚本的代码一样。

让我举例说明...

# 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”

谢谢

4

1 回答 1

1

我会在 caller.sh 中尝试这个:

#!/bin/bash

(
    exec /soft/executer.sh
)&

问题是块或子shell 只是父级的副本,这意味着父级可能已经消失,但子级具有相同的名称,因此出现在 ps 中。所以,如果你有:

    #!/bin/bash

    (
        /soft/executer.sh
    )&
    sleep 60

您将看到 caller.sh 的两个副本(父级和子级)。父母正在睡觉,孩子正在等待 executer.sh 完成。

于 2013-07-03T19:08:49.403 回答