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」コマンドの両方が表示されます。

最初のオプションを使用してこれを呼び出すことができることはわかっていますが、これは、ブロックを使用する2番目の例でプロセス「caller.sh」と「execute.sh」のリンクを解除する方法を尋ねる単純な例にすぎません

ありがとう

4

1 に答える 1

1

私はcaller.shでこれを試してみます:

#!/bin/bash

(
    exec /soft/executer.sh
)&

問題は、ブロックまたはサブシェルが単に親のコピーであることです。つまり、親がなくなっている可能性がありますが、子は同じ名前であるため、ps に表示されます。したがって、次の場合:

    #!/bin/bash

    (
        /soft/executer.sh
    )&
    sleep 60

caller.sh の 2 つのコピー (親と子) が表示されます。親はスリープ状態で、子は executer.sh が終了するのを待っています。

于 2013-07-03T19:08:49.403 に答える