DOBON.NET DOBON.NETプログラミング掲示板過去ログ

rshコマンド連続発行について

環境/言語:[VS2003 WindowsXP]
分類:[.NET]

本掲示版には毎回お世話になっております。
Processクラスを使用してrshコマンドを特定のサーバー(Linux)に複数発行した
ところ、rshの応答がもらえず処理が継続できない事象が発生しました。
複数発行は、非同期デリゲートを使用してマルチスレッドで発行しています。
(スレッド数は12個発行しています)

事象としては、最初に実行すると正常に動作するのですが、処理終了後すぐに
再度実行すると上記の事象が発生します。
またプロセスを終了し、再度プロセス起動して発行すると正常に結果を
取得することができます。またプロセスを終了せずにしばらく時間をおくと
正常に動作します。

タスクマネージャで確認すると正常に動作するときは、順次rsh.exeが起動
されていくのですが、異常時は急に複数のrsh.exeが起動されています。
(新規でrshを起動しているのではなく、再利用しているように見えます。
または、Processクラスでは終了していると認識しているが、実際にはrshの
後処理等で終了していないように感じます。あくまでも推測ですが・・・)

Processクラスの解放等に問題があるのかと思っていましたが、
実行時に新しくオブジェクトを生成しているため、問題ないと認識しています。

もし心当たりのある方がいらっしゃったら指摘して頂けると助かります。

また以下にProcessクラス起動時の処理を記述します。
(実際には、以下のプロセスが非同期で複数実行されます)

Dim stinfo As New Diagnostics.ProcessStartInfo

------------------------------------------------------
'ProcessStartInfo情報設定
stinfo.FileName = rsh.exe
stinfo.CreateNoWindow = True
stinfo.WindowStyle = ProcessWindowStyle.Hidden
stinfo.Arguments = リモート先装置名 -l ユーザー名 実行シェル名(フルパス)

'Processクラスの生成
Proc = New Process

Proc.StartInfo = stinfo

'プロセス起動
Proc.Start()

Proc.WaitForExit()



以降結果判定処理

--------------------------------------------------------

申し訳ございませんが、よろしくお願い致します。
■No27365に返信(zonoさんの記事)
原因が何か絞るため、とりあえずマルチスレッドをやめてみてはどうでしょう?
■No27366に返信(shuさんの記事)
> ■No27365に返信(zonoさんの記事)
> 原因が何か絞るため、とりあえずマルチスレッドをやめてみてはどうでしょう?
>
ご指摘して頂いてありがとうございます。
シングルスレッドにするととりあえずは発生しません。ただし、マルチスレッド
に比べて圧倒的に処理時間を要してしまうので・・・

ただしご指摘して頂いたようにシングルスレッドではとりあえず異常には
なりませんので原因解析をしたいのですが、どのような観点から解析すれば
よいでしょうか?
■No27368に返信(zonoさんの記事)
そうしたら次は起動スレッド数を1つづつ増やしていき、どこまで
安定して動くのかを試してみるとかどうでしょう?
時間を置くと安定するということはスレッドが終了しないうちに
動いてしまっているとかないですか?
■No27369に返信(shuさんの記事)
> ■No27368に返信(zonoさんの記事)
> そうしたら次は起動スレッド数を1つづつ増やしていき、どこまで
> 安定して動くのかを試してみるとかどうでしょう?
> 時間を置くと安定するということはスレッドが終了しないうちに
> 動いてしまっているとかないですか?
おおよそですが、7つくらいまでなら正常に動きはします。
解決できないのであれば仕方無いと思いますが、7つだと少し処理に時間が
かかってしまいます。(現状は10以上でスレッドを発行していたので)

スレッドの終了ですが、非同期で動作するプロシージャの出入り口でトレース
を実装し確認したところ、確実に出力されているので問題ないかと思っています。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33718&forum=7

によるとスレッドについて記載がないのでたぶんループで多数起動した場合も同じようです。

rshの特性とみて処理時間は我慢するしかなさそうな気がします(たぶん)

DOBON.NET | プログラミング道 | プログラミング掲示板