Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 检查进程是否正在运行并终止它_Perl - Fatal编程技术网

Perl 检查进程是否正在运行并终止它

Perl 检查进程是否正在运行并终止它,perl,Perl,我使用的是perl版本5.8.4 我正在使用一个名为JMP的程序。在打开程序之前,我想使用perl检查程序的进程是否已经在运行。如果它正在运行,我想关闭它 您只需添加以下内容: use autodie 'system'; system('killall', '-q', 'JMP'); 或 如果您想自己处理错误检查,而不是使用autodie,那么 die "Can't launch killall: $!\n" if $? < 0; die "killall

我使用的是perl版本5.8.4


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

您只需添加以下内容:

use autodie 'system';
system('killall', '-q', '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;
die“无法启动killall:$!\n”如果$?<0;
死“信号杀死所有人”。($?&0x7F)。“\n”如果$?&0x7F;
死“killall退出时出错”。($?>>8)。“\n”如果$?>>8.

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

它检查进程是否正在运行,使您能够执行更多操作(将输出打印到控制台,在需要时终止其子进程等),仅在程序运行时运行
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 &';
#/usr/bin/perl
使用警告;
严格使用;
#读取所有脚本名称进程
公开职业选手,“ps-ef | grep jmp |”;
#迭代过程
而($line=){
#如果我们匹配该进程,则杀死所有实例
除非($line=~m/grep/){
系统“killall jmp”;
最后的
}
}
#完成了这些过程
密切支持;
#启动jmp
执行“nohup/path/to/jmp&”;
如果您使用的是Windows,您将需要查看
taskkill
,而不是
killall
,返工:(Idk我是怎么来的,我迷路了)

这仅适用于windows,因为它是一个shell执行(Taskkill)

可能的副本:

perl>系统文档:

Taskkill文档:

关于语法重定向(基于awnser-from):


这可能有助于u$exists=kill 01525;如果($存在,则打印“进程正在运行”\n);从这里你也可以检查01525是什么意思?它是如何指具体流程的?是什么操作系统?您的perl脚本如何启动JMP?windows。我唯一的问题是找出是否正在运行,如果是,则将其关闭。您可能希望添加一个说明,说明如何检查退出代码以执行其他操作。结果发现OP仍在使用Windows,但忽略了告诉我们:DI注意到了,但他已经有了一个解决方案。我收到一个错误:“ps”不能被识别为内部或外部命令、可操作程序或批处理文件。@Vera,你在使用Windows?提出这个问题会很有用。
#!/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 &';
system('taskkill /F /IM ImageName.exe >nul 2>&1');