1

実行中のプロセスを強制終了するためのシステムコールを行うPerlスクリプトを書いています。たとえば、すべてのPuTTyウィンドウを強制終了します。これを行うために、私は持っています:

system('TASKKILL / F/IMパテ*/T 2> nul');

しかし、殺されたプロセスごとに、私は次のような印刷物を受け取ります

成功:PIDxxxxの子であるPIDxxxxのプロセスが終了しました。

これは私のCLIを乱雑にしています。これらのプリントを削除する簡単な方法は何ですか?また、これらのスクリプトをCygwinで実行していることにも注意してください。

4

3 に答える 3

4

リダイレクトsderr->stdout->nul:

system('TASKKILL /F /IM putty* /T 1>nul 2>&1');

または単に出力を取得します:

my $res = `TASKKILL /F /IM putty* /T 2>nul`;
于 2011-09-15T21:11:20.223 に答える
0

TASKKILL2番目ではなく、最初のファイル記述子(標準出力)に書き込みます。あなたが言いたい

system('TASKKILL /F /IM putty* /T >nul');
于 2011-09-15T21:30:26.703 に答える
0
$exec_shell='TASKKILL /F /IM putty* /T 2>nul';
my $a = run_shell($exec_shell);
#i use this function:
sub run_shell {
    my ($cmd) = @_;
    use IPC::Open3 'open3';
    use Carp;
    use English qw(-no_match_vars);
    my @args  = ();
    my $EMPTY = q{};
    my $ret   = undef;
    my ( $HIS_IN, $HIS_OUT, $HIS_ERR ) = ( $EMPTY, $EMPTY, $EMPTY );
    my $childpid = open3( $HIS_IN, $HIS_OUT, $HIS_ERR, $cmd, @args );
    $ret = print {$HIS_IN} "stuff\n";
    close $HIS_IN or croak "unable to close: $HIS_IN $ERRNO";
    ;    # Give end of file to kid.

    if ($HIS_OUT) {
        my @outlines = <$HIS_OUT>;    # Read till EOF.
        $ret = print " STDOUT:\n", @outlines, "\n";
    }
    if ($HIS_ERR) {
        my @errlines = <$HIS_ERR>;    # XXX: block potential if massive
        $ret = print " STDERR:\n", @errlines, "\n";
    }
    close $HIS_OUT or croak "unable to close: $HIS_OUT $ERRNO";

    #close $HIS_ERR or croak "unable to close: $HIS_ERR $ERRNO";#bad..todo
    waitpid $childpid, 0;
    if ($CHILD_ERROR) {
        $ret = print "That child exited with wait status of $CHILD_ERROR\n";
    }
    return 1;
}
于 2011-09-16T16:14:39.807 に答える