- PR -

バックグラウンド起動時の戻り値について

1
投稿者投稿内容
くつ
会議室デビュー日: 2004/09/16
投稿数: 2
投稿日時: 2004-09-16 15:04
#SunOS 5.9
#Bシェル

rshコマンドを利用して、バックグラウンドでリモートシェルを
起動した場合の戻り値についてお聞きします。
--------------------------------
#!/bin/sh
$HOSTNAME=hos
$RSH_COM="remote.sh -go"
/usr/bin/rsh $HOSTNAME $RSH_COM & <---☆
echo "ret=($?)"
--------------------------------

上記のように、バックグラウンドで起動した場合、
もしremote.shが存在していなくても、
戻り値は0(remote.shの起動に成功)になってしまいます。
ret=0

フォアグラウンドで起動した場合には、
戻り値は1(remote.shが異常終了)となります。
permission denied
ret=(1)

バックグラウンドで起動した場合に、
リモートシェルの”起動”に成功したか
失敗したかを取得することはできないのでしょうか?


[ メッセージ編集済み 編集者: 未記入 編集日時 2004-09-16 15:05 ]
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-09-16 17:36
こんな事やった事無いんではっきりした答が出せんのですが、

rsh 実行先マシン foobar のホームディレクトリ /home/hogera/ かどっかで

コード:
#!/bin/sh

exit 6



こんな内容のファイル作って、仮にファイル名 nop で保存して実行権限つけたら、
rsh 実行元で

if [ `rsh foobar pwd` ] ; then echo 1; else echo 0; fi

これを実行した結果と

if [ `rsh foobar /home/hogera/nop` ]; then echo 1; else echo 0; fi

これを実行した結果が違ごてますんで、これがヒントぐらいにはなるかも・・・
糞の役にも立たんて? (プ

そら失礼。
くつ
会議室デビュー日: 2004/09/16
投稿数: 2
投稿日時: 2004-09-16 18:58
話は少しそれるかもしれませんが、
リモートシェルの戻り値は
フォアグラウンド起動/バックグラウンド起動に関わらず、
取得できないようです。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-09-16 19:03
Perl とか C の system(); 関数で Wrapping したら?
どうせ10行あるか無いかぐらいやろから・・・

rsh は対象外かな?
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-09-16 23:01
引用:

くつさんの書き込み (2004-09-16 15:04) より:
バックグラウンドで起動した場合に、
リモートシェルの”起動”に成功したか
失敗したかを取得することはできないのでしょうか?


rsh に限らず、バックグラウンドで起動したコマンドの
終了ステータスが $? にセットされることはありません。

終了ステータスを取得するのが技術的に不可能というわけでは
ありません。wait系システムコールを使って取得する
プログラムは書けます。
# わかりにくい表現だったので追記。
要するに、シェル組み込みの wait コマンドなんかで終了ステータスを
取得できるようになっているんでないかしら?とゆーことです。
なお、シェルから起動したプロセスの終了ステータスを取得するには
組み込みコマンドになってないと不可です。

引用:

話は少しそれるかもしれませんが、
リモートシェルの戻り値は
フォアグラウンド起動/バックグラウンド起動に関わらず、
取得できないようです。


rsh じゃなくて ersh を使うとか ssh を使うとかすればO.K.

[ メッセージ編集済み 編集者: ぽんす 編集日時 2004-09-17 08:38 ]
1

スキルアップ/キャリアアップ(JOB@IT)