Quiero saber cómo comprobar si el programa se está ejecutando y ejecutar este programa si no es así.compruebe si el programa se está ejecutando y ejecútelo si no está en perl
Respuesta
Envía una señal de 0 (cero) a la identificación del proceso que deseas verificar con la función de cancelación. Si el proceso existe, la función devuelve verdadero; de lo contrario, devuelve falso.
Ejemplo:
#-- check if process 1525 is running
$exists = kill 0, 1525;
print "Process is running\n" if ($exists);
Puede llamar a cualquier programa como lo haría desde la línea de comandos mediante una llamada al sistema. Esto solo es útil si no necesita capturar la salida del programa.
#!/usr/bin/perl
use strict;
use warnings;
my $status = system("vi fred.txt");
O si usted no quiere involucrar a la shell:
#!/usr/bin/perl
use strict;
use warnings;
my $status = system("vi", "fred.txt");
bien, pero ¿cómo comprobar si el proceso se está ejecutando por su nombre? : D – Luke
http://search.cpan.org/~durist/Proc-ProcessTable-0.39/ProcessTable.pm No tengo mucho que saber con Perl, pero estoy seguro de que es lo que está buscando. – Sturm
Vea también http://stackoverflow.com/questions/3844168/how-can-i-check-if-a-unix-process-is-running-in-perl – Bruce
Al igual que en otra respuesta, pero hay que asegurarse de usar y "grep -v grep" para no coincidir con el grep llamarse a sí mismo. Esto asegurará que no estés evaluando en verdadero cuando no quieras.
use strict;
use warnings;
my($cmd, $process_name) = ("command here", "process name here");
if(`ps -aef | grep -v grep $process_name`) {
print "Process is running!\n";
}#if
else {
`$cmd &`;
}#else
Esta respuesta solo funciona en * nix. Uno de los puntos principales del uso de comandos incorporados y módulos CPAN es que en la mayoría de los casos no tiene que preocuparse por la portabilidad. La opción 'kill 0, $ pid' funciona en otros sistemas operativos, como Windows. :-) –
Creo que puedes usar 'pgrep', la ejecución de procesos en ejecución es tan común, hay un comando especial para eso;) –
Usamos esto para comprobar si un demonio está en ejecución, basado en el contenido del demonio comiencen pid-file en Linux:
#!/usr/local/bin/perl
use strict;
use warnings;
use feature qw/ say /;
# vars we report
my (
$token, # optional arg - check against cmd_line if specified
$pid_file, # daemon pid-file, e.g. /var/run/mysqld/mysqld.pid
$pid, # the pid to investigate...
$pid_running, # found a pid and it is running
$cmd_line, # cmd_line of the running pid
$result, # 0-OK, 1=FAIL, exit value
$error, # error message if necessary
);
# working vars
my ($fh, $cmd_file);
die "Daemon pid-file required" unless scalar @ARGV >= 1;
($pid_file, $token) = @ARGV;
if (-s $pid_file) {
open($fh, "<", $pid_file) or die "open $pid_file: $!";
($pid) = <$fh>; chomp $pid; close $fh;
$pid_running = kill 0, $pid;
if ($pid_running) {
$cmd_file = "/proc/$pid/cmdline";
local($/) = "\0"; # C-String NULL terminated
open($fh, "<", $cmd_file) or die "open $cmd_file: $!";
($cmd_line) = <$fh>; close $fh;
if ($cmd_line && $token && $cmd_line !~ m/$token/) {
$error = "token not found: $token in $cmd_line";
}
}
else {
$error = "process not found: $pid";
}
}
else {
$error = "file not found: $pid_file";
}
# if TOKEN - OK running process with matching cmdline
$result = $token ? ($pid_running && $cmd_line && $cmd_line =~ m/$token/)
: ($pid_running || 0);
say "token: ", $token if $token;
say "file: ", $pid_file;
if ($pid) {
say "pid: ", $pid;
say "running: ", $pid_running;
say "cmdline: ", $cmd_line if $cmd_line;
}
say "error: ", $error if $error;
say "exit: ", $result ? 'ok' : 'fail';
exit $result;
Probé "matar a 0 ..." cosa, pero eso no funcionará si no tiene un permiso para el proceso, ya que "matar 0" solo comprueba si es posible para enviar una señal. Como no tiene permiso (su UID no es 0 y el proceso tampoco es UID), siempre será falso.
También traté de llevarlo a la cuenta/proc/en Linux para comprobar si el directorio PID está allí, pero esa parte no es muy portátil: bueno para Linux, pero realmente no funcionará en ningún otro lado en UNIX sin una amor adicional
Así que escribió este sub, HTH:
sub is_running() {
my $pid = shift;
my @proc_data = split(/\s+:\s+/,
`ps uax | awk '{print \$1,":",\$2}' | grep $pid`);
return (@proc_data && $proc_data[1] == $pid) ? $proc_data[0] : undef;
}
uso es simple y muy útil, ya que le devuelve también propietario del proceso:
my $pid = 12345;
my $owner = &is_running($pid);
if ($owner) {
print "Process with PID $pid is running and owned by \"$owner\".\n";
}
divertirse! :)
Si $pid
está vacía, el proceso no se está ejecutando:
my $pid = `ps -C $progname -o pid=`; # non-windows solution, sorry
- 1. Determinar si el programa se está ejecutando en Windows Server
- 2. Compruebe si un script php todavía se está ejecutando
- 3. Comprobar si el proceso se está ejecutando
- 4. ¿Cómo puede saber mi programa si Delphi se está ejecutando?
- 5. Compruebe si el archivo ya está abierto
- 6. Powershell: si un proceso no se está ejecutando, inícielo
- 7. Compruebe si un subproceso de Win32 se está ejecutando o está en estado suspendido
- 8. compruebe si NSNumber está vacío
- 9. Compruebe si "exec" está deshabilitado
- 10. Verifica programáticamente si se está ejecutando syncdb
- 11. comisión si ya se está ejecutando
- 12. Compruebe si el socket está conectado o no
- 13. Compruebe si el espacio está en una cadena
- 14. WP7 compruebe si Internet está disponible
- 15. Android: compruebe si el servicio se está ejecutando a través de. bindService
- 16. Compruebe si el proceso de Mac se está ejecutando utilizando Bash por nombre de proceso
- 17. Cómo saber si el servidor de emacs se está ejecutando
- 18. ¿Cómo verificar si el servidor X se está ejecutando?
- 19. Delphi: compruebe si el archivo está en uso
- 20. AS3: compruebe si un diccionario está vacío
- 21. Compruebe si algo no está en una lista en Python
- 22. ¿Cómo verificar si un proceso se está ejecutando con Delphi?
- 23. Comprobando si el proceso aún se está ejecutando?
- 24. Finalmente el bloque no se está ejecutando?
- 25. Compruebe si $ _POST-value está vacío
- 26. Compruebe si un puerto está abierto
- 27. Compruebe si la cadena está vacía
- 28. Compruebe si una matriz está vacía
- 29. OSX: compruebe si la pantalla está bloqueada
- 30. Compruebe si el tiempo frontal está habilitado en el dispositivo
¿Qué sistema operativo utiliza? –
Debian 6, pero la pregunta está resuelta. – Luke