检查进程是否正在运行并将其终止

时间:2013-08-29 11:25:04

标签: perl

我使用的是perl版本5.8.4。

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分:1)

REWORK :(我想我怎么来这里,我只是迷路了)

这只适用于windows,因为shell执行(Taskkill)。

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

可能重复:

How can I kill a program that might not exist from Perl on Win32?

perl&gt;系统文档:

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

Taskkill文档:

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

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

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