は、私が(存在する場合)のPerlアプリケーションでをいくつかのプロセスとスレッドを殺すする必要がありますが、私のようなps
、grep
、awk
、cut
、uniq
または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
を返します。私は外部コマンドを使用せずに代替ソリューションを探しています。
私はそれを使っている経験はありませんが、['Proc :: ProcessTable'](http://search.cpan.org/~durist/Proc-ProcessTable-0.39/ProcessTable.pm)が役に立つかもしれません。 –
'grep'と' cut'の 'awk'でパイプラインを使うのは、Perlだけでなくシェルで使われていても赤旗です。 awkはマッチしてスナップすることができます。 Perlを使用しているので、解析を実行するためにこれらの外部ユーティリティーは必要ありません。 – JRFerguson
'ps'オプション' -L'はスレッド用ですので、すべてのプロセスと**スレッド**をリストする必要があります。 –