challenge 指定コマンドを別プロセスで起動

与えられた文字列のコマンドを、別プロセスで実行してください。 異なるPIDのプロセスが立ち上がり、指定したコマンドを実行することが条件です。

あわせて、実行結果のリターンコードと、別プロセスが出力した標準出力を受け取る方法も記載してください。

今回投稿する上で、別プロセスとして実行するコマンドの与え方は自由ですが、実行した結果、何らかの損害を与えるようなコマンドは埋め込まないようにお願いします。

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
 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 ==
1
2
3
4
5
6
7
8
#/bin/sh
for program in $*
do
    stdout=`($program)` ; status=$?
    echo = $program =
    echo $stdout
    echo == 終了コード:$status ==
done

Index

Feed

Other

Link

Pathtraq

loading...