2012-03-07 12 views
2

は、私が(存在する場合)のPerlアプリケーションでをいくつかのプロセスとスレッドを殺すする必要がありますが、私のようなpsgrepawkcutuniqまたはkillを外部コマンド(複数可)を使用したくありません。外部コマンドを使わずにPerlでスレッド/プロセスをリストして強制終了するには?

私の現在のコードは次のとおりです。私の記憶が限られているので、私は、VPSを使用しています

 my $appName = $0; 
     $appName =~ s/^.*\/([^\/]*)$/$1/; 
     $_ = qx(kill -9 `ps -eLao pid,command | grep '$appName\[ 0-9\]*\$' | 
       grep -v grep | awk '\$1 != $$' | cut -d' ' -f1 | uniq` 2>&1); 

。上記のコードは、システムが外部コマンドの呼び出しのためにメモリを割り当てることができないため、時々undefを返します。私は外部コマンドを使用せずに代替ソリューションを探しています。

+1

私はそれを使っている経験はありませんが、['Proc :: ProcessTable'](http://search.cpan.org/~durist/Proc-ProcessTable-0.39/ProcessTable.pm)が役に立つかもしれません。 –

+3

'grep'と' cut'の 'awk'でパイプラインを使うのは、Perlだけでなくシェルで使われていても赤旗です。 awkはマッチしてスナップすることができます。 Perlを使用しているので、解析を実行するためにこれらの外部ユーティリティーは必要ありません。 – JRFerguson

+0

'ps'オプション' -L'はスレッド用ですので、すべてのプロセスと**スレッド**をリストする必要があります。 –

答えて

5

kill/proc fsなどの内部強制コマンド、またはWin32::Process::Listなどの一部のモジュール、またはProc::名前空間のものを使用します。

+0

'ps'オプション' -L'はスレッド用ですので、全てのプロセスと**スレッド**をリストアップする必要があります。 –

+0

プロセスのために、モデルProc :: ProcessTableと内部のPerlコマンド 'kill'を提案するつもりです。しかし今のところ、 'ps -eLaf'のようなすべてのスレッドの解決策はありません。 –

関連する問題