今だけ人気マンガ100円レンタル特集♪

現在、Windows 2000とXPで、perlを、test.batをダブルクリックする形で使っています。
他にも、並列で、いくつか、同様の方法でperlを実行させていますが、test.cgiが終了した時、test.cgi以外のperlプログラムを全て強制終了させたいのですが、何か、良い方法はないでしょうか?

----test.bat---
perl test.cgi
----
----test.cgi---
sleep 10;
exec("taskkill /F /IM perl.exe");
print 'test.cgi以外のperl.exeを強制終了しました';
----
上記方法を試してみたのですが、自身のperl強制終了されてしまいます。
実際は、printの部分には様々な動作を行うため、自身のPIDを見つけ出して、それ以外を強制終了するような方法が最適です。
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

exec 関数は実行後、制御が戻らないので、


“print”の前にスクリプトが終了してしまいます。
system 関数を使うのが無難な方法だと思います。

また、配列に実行結果を入れたい場合、
バッククオートで実行すると良いと思います。
my @result = `tasklist`;
# 当方、XP Home 環境なので、tasklist が無いので未確認です。
    • good
    • 0
この回答へのお礼

そうですね。systemの方が適切でした。
また、無事、tasklistの結果が配列に入りました!
回答いただきありがとうございます。

お礼日時:2008/06/10 20:11

exec って「単純に実行するだけ」じゃなかったっけ?


`` とか qx// とか open は使える... かなぁ?
    • good
    • 0

試していないのですけれど、変数$$に自身のPIDが入りますのでaghartaさんの言われるようなtasklistの結果と合わせてほかのperl.exeのPIDがわかるのではないでしょうか。


一応、perl.exeにprint $$;とかさせてみるとそれらしい値が表示されます。

(でも、MS WindowsのPIDの管理の仕方はよくわからない…)

この回答への補足

回答いただきありがとうございます。
なるほど、これで、自身のPIDが分かるのですね。
ありがとうございます。とても、参考になりました。

ところで、
@pid = exec("tasklist");
としてみたのですが、printをしていないにも関わらず、
DOS窓には情報が表示され、配列には情報が入りません。

いったいどうすれば、取得できるのかご存知でしたら教えてください。
宜しくお願い致します。

補足日時:2008/06/10 18:39
    • good
    • 0

tasklistというコマンドからすべてのPIDを取得して、


必要なPIDだけを抜き出してはいかがでしょうか。
その後、taskkillでプロセスを終了させる方法でできると思います。

それぞれのコマンドの使用方法は、コマンドプロンプトで
tasklist /?
taskkill /?
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
その方法も考えてみたのですが、
perl.exeがいくつか動いているため、いったいどれが、自分のPIDか分からず、困っています。
自分以外のperl.exeのPIDが分かれば簡単なんですけどね・・・

お礼日時:2008/06/10 18:20

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング