指定コマンドを別プロセスで起動
Posted feedbacks - Bash
やったー。bashがまだいない。
$./run.sh ps
==実行結果==
PID TTY TIME CMD
3102 pts/1 00:00:01 bash
25115 pts/1 00:00:00 bash
25116 pts/1 00:00:00 ps
==終了コード==
0
$./run.sh ps
==実行結果==
PID TTY TIME CMD
3102 pts/1 00:00:01 bash
25115 pts/1 00:00:00 bash
25116 pts/1 00:00:00 ps
==終了コード==
0
1 2 3 4 5 6 7 8 9 10 | #/bin/sh
$1 > __OUT__ ; echo $? > __RET__ &
sleep 3
echo ==実行結果==
cat __OUT__
echo ==終了コード==
cat __RET__
rm __OUT__ __RET__
|
カレントディレクトリに一時ファイルを作成しなくても、サブシェルを利用すればワンラ
イナーでいけますね。
e.g.
$ (ps); echo $?
PID PPID PGID WINPID TTY UID STIME COMMAND
2440 1 2440 2440 con 1004 15:00:47 /usr/bin/bash
3404 2440 3404 3424 con 1004 15:35:47 /usr/bin/ps
# 手元にCygwinしかなかったので、純粋なUnix環境で実行したとは言えませんが...
コマンド文字列に複数のコマンドやパイプが含まれている場合はもう少し考えないといけ
ませんね。
# > bashがまだいない。
# 数多の心優しく慎み深いUnix使い達は、敢えて誰かが解くのを静観していたのかも ;-)
ふむふむ。サブシェルは使った経験なかったです。
こんな感じでしょうか。ループで複数コマンドに対応してみました。パイプはご勘弁を。
$ ./run2.sh date true false
= date =
2008年 3月 23日 日曜日 20:14:49 JST
== 終了コード:0 ==
= true =
== 終了コード:0 ==
= false =
== 終了コード:1 ==
こんな感じでしょうか。ループで複数コマンドに対応してみました。パイプはご勘弁を。
$ ./run2.sh date true false
= date =
2008年 3月 23日 日曜日 20:14:49 JST
== 終了コード:0 ==
= true =
== 終了コード:0 ==
= false =
== 終了コード:1 ==
1 2 3 4 5 6 7 8 | #/bin/sh
for program in $*
do
stdout=`($program)` ; status=$?
echo = $program =
echo $stdout
echo == 終了コード:$status ==
done
|





todogzm
#5353()
Rating4/8=0.50
与えられた文字列のコマンドを、別プロセスで実行してください。 異なるPIDのプロセスが立ち上がり、指定したコマンドを実行することが条件です。
あわせて、実行結果のリターンコードと、別プロセスが出力した標準出力を受け取る方法も記載してください。
今回投稿する上で、別プロセスとして実行するコマンドの与え方は自由ですが、実行した結果、何らかの損害を与えるようなコマンドは埋め込まないようにお願いします。
[ reply ]