我有兩個程式,prog1 和 prog2,prog2 將 prog1 的 PID 作為引數,它們必須并行運行。
我需要 prog1 的 stdin 和 stdout 來保持與 shell 的連接,注意它不是互動式 shell。
我是這樣嘗試的,但是 prog1 的 stdin 沒有連接到 shell:
#!/bin/bash
./prog1 & (./prog2 $! 1>&2 0<&-)
fg
uj5u.com熱心網友回復:
從 bash 手冊:
如果命令由控制運算子“&”終止,則外殼在子外殼中異步執行命令。這稱為在后臺執行命令,這些被稱為異步命令。shell 不等待命令完成,回傳狀態為 0(真)。當作業控制未激活時(請參閱作業控制),異步命令的標準輸入在沒有任何顯式重定向的情況下從 /dev/null 重定向。
所以讓我們做一些明確的重定向!以下腳本:
==> prog1 <==
#!/bin/bash
set -x
read data
echo "$data"
==> prog2 <==
#!/bin/bash
while kill -0 "$1"; do sleep 0.1; done
==> script.sh <==
#!/bin/bash
set -x
./prog1 <&0 &
# ^^^^ - the important part
./prog2 $! >&2 <&-
wait
執行./script.sh結果時:
$ LC_ALL=C ./script.sh
./prog2 1835980
./prog1
read data
bla
echo bla
bla
./prog2: line 2: kill: (1835980) - No such process
wait
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/372724.html
標籤:猛击
