fix(node_info): fix stale worker lock detection for zombie processes (#306)
Co-authored-by: Meliox <na>
This commit is contained in:
parent
e46734cd37
commit
f754331c3a
@ -112,7 +112,14 @@ sub notify_pve_mod_worker {
|
||||
# ============================================================================
|
||||
|
||||
sub _worker_lock_file_exists {
|
||||
return -f $pve_mod_worker_lock;
|
||||
return 0 unless -f $pve_mod_worker_lock;
|
||||
my $pid = read_lock_pid($pve_mod_worker_lock);
|
||||
if (defined $pid && $pid =~ /^(\d+)$/ && is_process_alive($1)) {
|
||||
return 1;
|
||||
}
|
||||
debug(__LINE__, "Stale or zombie worker lock found, removing it");
|
||||
unlink($pve_mod_worker_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
# Forks the worker process and records its PID in the lock file.
|
||||
|
||||
@ -91,7 +91,15 @@ sub read_sysfs {
|
||||
|
||||
sub is_process_alive {
|
||||
my ($pid) = @_;
|
||||
return -d "/proc/$pid";
|
||||
return 0 unless -d "/proc/$pid";
|
||||
# A zombie still has /proc/<pid> but is dead - otherwise a stale
|
||||
# worker lock is never cleaned up.
|
||||
if (open my $fh, '<', "/proc/$pid/stat") {
|
||||
my $line = <$fh>;
|
||||
close $fh;
|
||||
return 0 if defined $line && $line =~ /\)\s+Z\s/;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub read_lock_pid {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user