Added -z command line paramter to pidof which tells pidof to
try to find processes in uninterruptable (D) or zombie (Z) states. This can cause pidof to hang, but produces a more complete process list.
This commit is contained in:
parent
5f96543c96
commit
39df2f0fa3
@ -1,3 +1,13 @@
|
|||||||
|
sysvinit (2.96) released; urgency=low
|
||||||
|
|
||||||
|
[ Jesse Smith ]
|
||||||
|
|
||||||
|
* Added -z command line paramter to pidof which tells pidof to
|
||||||
|
try to find processes in uninterruptable (D) or zombie (Z) states.
|
||||||
|
This can cause pidof to hang, but produces a more complete process
|
||||||
|
list.
|
||||||
|
|
||||||
|
|
||||||
sysvinit (2.95) released; urgency=low
|
sysvinit (2.95) released; urgency=low
|
||||||
|
|
||||||
[ Jesse Smith ]
|
[ Jesse Smith ]
|
||||||
|
@ -24,6 +24,7 @@ pidof -- find the process ID of a running program.
|
|||||||
.RB [ \-c ]
|
.RB [ \-c ]
|
||||||
.RB [ \-n ]
|
.RB [ \-n ]
|
||||||
.RB [ \-x ]
|
.RB [ \-x ]
|
||||||
|
.RB [ \-z ]
|
||||||
.RB [ \-o
|
.RB [ \-o
|
||||||
.IR omitpid[,omitpid...] ]
|
.IR omitpid[,omitpid...] ]
|
||||||
.RB [ \-o
|
.RB [ \-o
|
||||||
@ -64,6 +65,10 @@ a status of true or false to indicate whether a matching PID was found.
|
|||||||
.IP \-x
|
.IP \-x
|
||||||
Scripts too - this causes the program to also return process id's of
|
Scripts too - this causes the program to also return process id's of
|
||||||
shells running the named scripts.
|
shells running the named scripts.
|
||||||
|
.IP \-z
|
||||||
|
Try to detect processes which are stuck in uninterruptible (D) or zombie (Z)
|
||||||
|
status. Usually these processes are skipped as trying to deal with them can cause
|
||||||
|
pidof to hang.
|
||||||
.IP "-d \fIsep\fP"
|
.IP "-d \fIsep\fP"
|
||||||
Tells \fIpidof\fP to use \fIsep\fP as an output separator if more than one PID
|
Tells \fIpidof\fP to use \fIsep\fP as an output separator if more than one PID
|
||||||
is shown. The default separator is a space.
|
is shown. The default separator is a space.
|
||||||
@ -92,6 +97,8 @@ so symbolic links to executables will also match.
|
|||||||
.PP
|
.PP
|
||||||
Zombie processes or processes in disk sleep (states Z and D, respectively)
|
Zombie processes or processes in disk sleep (states Z and D, respectively)
|
||||||
are ignored, as attempts to access the stats of these will sometimes fail.
|
are ignored, as attempts to access the stats of these will sometimes fail.
|
||||||
|
The \-z flag (see above) tells pidof to try to detect these sleeping and zombie
|
||||||
|
processes, at the risk of failing or hanging.
|
||||||
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR shutdown (8),
|
.BR shutdown (8),
|
||||||
|
@ -135,9 +135,17 @@ NFS *nlist;
|
|||||||
|
|
||||||
/* Did we stop all processes ? */
|
/* Did we stop all processes ? */
|
||||||
int sent_sigstop;
|
int sent_sigstop;
|
||||||
|
|
||||||
int scripts_too = 0;
|
int scripts_too = 0;
|
||||||
|
|
||||||
|
/* Should pidof try to list processes in I/O wait (D) and zombie (Z) states? */
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
int list_dz_processes = FALSE;
|
||||||
|
|
||||||
char *progname; /* the name of the running program */
|
char *progname; /* the name of the running program */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__attribute__ ((format (printf, 2, 3)))
|
__attribute__ ((format (printf, 2, 3)))
|
||||||
@ -598,8 +606,9 @@ int readproc(int do_stat)
|
|||||||
if (startcode == 0 && endcode == 0)
|
if (startcode == 0 && endcode == 0)
|
||||||
p->kernel = 1;
|
p->kernel = 1;
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
if ( (strchr(process_status, 'D') != NULL) ||
|
if ( (! list_dz_processes) &&
|
||||||
(strchr(process_status, 'Z') != NULL) ){
|
( (strchr(process_status, 'D') != NULL) ||
|
||||||
|
(strchr(process_status, 'Z') != NULL) ) ){
|
||||||
/* Ignore zombie processes or processes in
|
/* Ignore zombie processes or processes in
|
||||||
disk sleep, as attempts
|
disk sleep, as attempts
|
||||||
to access the stats of these will
|
to access the stats of these will
|
||||||
@ -955,6 +964,7 @@ void pidof_usage(void)
|
|||||||
printf(" -q Quiet mode. Do not display output\n");
|
printf(" -q Quiet mode. Do not display output\n");
|
||||||
printf(" -s Only return one PID\n");
|
printf(" -s Only return one PID\n");
|
||||||
printf(" -x Return PIDs of shells running scripts with a matching name\n");
|
printf(" -x Return PIDs of shells running scripts with a matching name\n");
|
||||||
|
printf(" -z List zombie and I/O waiting processes. May cause pidof to hang.\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1008,7 +1018,7 @@ int main_pidof(int argc, char **argv)
|
|||||||
if ((token = getenv("PIDOF_NETFS")) && (strcmp(token,"no") != 0))
|
if ((token = getenv("PIDOF_NETFS")) && (strcmp(token,"no") != 0))
|
||||||
flags |= PIDOF_NETFS;
|
flags |= PIDOF_NETFS;
|
||||||
|
|
||||||
while ((opt = getopt(argc,argv,"qhco:d:sxn")) != EOF) switch (opt) {
|
while ((opt = getopt(argc,argv,"qhco:d:sxzn")) != EOF) switch (opt) {
|
||||||
case '?':
|
case '?':
|
||||||
nsyslog(LOG_ERR,"invalid options on command line!\n");
|
nsyslog(LOG_ERR,"invalid options on command line!\n");
|
||||||
closelog();
|
closelog();
|
||||||
@ -1056,6 +1066,9 @@ int main_pidof(int argc, char **argv)
|
|||||||
case 'x':
|
case 'x':
|
||||||
scripts_too++;
|
scripts_too++;
|
||||||
break;
|
break;
|
||||||
|
case 'z':
|
||||||
|
list_dz_processes = TRUE;
|
||||||
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
flags |= PIDOF_NETFS;
|
flags |= PIDOF_NETFS;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user