-1

我正在使用 perl 版本 5.8.4。

我正在使用一个名为 JMP 的程序。在打开程序之前,我想使用 perl 检查程序的进程是否已经在运行。如果它正在运行,我想关闭它。

4

3 回答 3

1

使用我从其他人那里得到的关于这个问题的有用输入,重写答案以更适合手头的问题。

它检查进程是否正在运行,使您能够做的不仅仅是杀死它(打印输出到控制台,如果需要,杀死它的子进程等),killall 在程序正在运行时运行,然后启动jmp

#!/usr/bin/perl
use warnings;
use strict;

# Read all script-name processes
open PROS, "ps -ef| grep jmp |";

# Iterate the processes
while ($line = <PROS>){
    # If we match the process, kill all instances
    unless ($line =~ m/grep/){
        system 'killall jmp';
        last;
    }
}

# Finished with the processes
close PROS;

# Start jmp
exec 'nohup /path/to/jmp &';

如果您使用的是 Windows,则需要查看taskkill而不是killall.

于 2013-08-29T14:30:44.557 回答
1

您只需添加以下内容:

use autodie 'system';
system('killall', '-q', 'JMP');

或者

use autodie 'system';
system('pkill', 'JMP');

如果您想自己处理错误检查而不是使用 autodie,它看起来像

die "Can't launch killall: $!\n"                 if $? < 0;
die "killall killed by signal ".($? & 0x7F)."\n" if $? & 0x7F;
die "killall exited with error ".($? >> 8)."\n"  if $? >> 8;
于 2013-08-29T11:45:06.920 回答
1

返工:(我知道我是怎么到这里的,我只是迷路了)

这仅适用于 Windows,原因是 shell 执行(Taskkill)。

system('taskkill /F /IM ImageName.exe >nul 2>&1');

可能的重复:

如何在 Win32 上杀死 Perl 中可能不存在的程序?

perl > 系统文档:

http://perldoc.perl.org/functions/system.html

任务杀戮文档:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/taskkill.mspx?mfr=true

关于语法重定向(基于How can I kill a program that may not exist from Perl on Win32? 的 awnser?):

http://ss64.com/nt/syntax-redirection.html

于 2013-08-29T14:35:31.083 回答