Подавить отпечатки от TASKKILL - PullRequest
       10

Подавить отпечатки от TASKKILL

1 голос
/ 16 сентября 2011

Я пишу Perl-скрипт, который делает системные вызовы для уничтожения запущенных процессов. Например, я хочу убить все окна PuTTy. Для этого у меня есть:

система ('TASKKILL / F / IM шпатлевка * / T 2> nul');

Однако для каждого убитого процесса я получаю распечатку с надписью

УСПЕХ: Процесс с PID xxxx, потомком PID xxxx, был прекращен.

который загромождает мой CLI. Какой простой способ устранить эти отпечатки? Также обратите внимание, что я выполняю эти скрипты в Cygwin.

Ответы [ 3 ]

4 голосов
/ 16 сентября 2011

Redirect sderr-> stdout-> nul:

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

или просто захватите вывод:

my $res = `TASKKILL /F /IM putty* /T 2>nul`;
0 голосов
/ 16 сентября 2011
$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;
}
0 голосов
/ 16 сентября 2011

TASKKILL пишет в первый дескриптор файла (стандартный вывод), а не во второй. Вы хотите сказать

system('TASKKILL /F /IM putty* /T >nul');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...