我使用的是perl版本5.8.4。
我正在使用一个名为JMP的程序。在打开程序之前,我想使用perl来检查程序的进程是否已经运行。如果它正在运行,我想关闭它。
答案 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文档:
关于语法重定向(基于How can I kill a program that might not exist from Perl on Win32?的awnser):