pidof: support for omitted %PPID and additional separators

This commit introduces support for special %PPID value that
can be passed to the -o option as a substitution for parent
PID. It also allows users to use two additional separators
for omitted PIDs - colon and semicolon.
This commit is contained in:
Jaromir Capik 2013-10-14 15:38:33 +02:00
parent 8a2113bcf2
commit f5d15f4718
2 changed files with 11 additions and 4 deletions

View File

@ -44,7 +44,9 @@ the current root directory of processes they do not own.
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 "-o \fIomitpid\fP" .IP "-o \fIomitpid\fP"
Tells \fIpidof\fP to omit processes with that process id. Tells \fIpidof\fP to omit processes with that process id. The special
pid \fB%PPID\fP can be used to name the parent process of the \fIpidof\fP
program, in other words the calling shell or shell script.
.SH "EXIT STATUS" .SH "EXIT STATUS"
.TP .TP
.B 0 .B 0

View File

@ -246,10 +246,15 @@ static void add_to_omit_list (char *input_arg)
pid_t omit_pid; pid_t omit_pid;
omit_str = NULL; omit_str = NULL;
omit_str = strtok(input_arg, ","); omit_str = strtok(input_arg, ",;:");
while (omit_str) { while (omit_str) {
if (!strcmp(omit_str,"%PPID")) { /* keeping this %PPID garbage for backward compatibility only */
omit_pid = getppid(); /* ... as it can be replaced with $$ in common shells */
endptr = omit_str + sizeof("%PPID") - 1;
} else {
omit_pid = strtoul(omit_str, &endptr, 10); omit_pid = strtoul(omit_str, &endptr, 10);
}
if (*endptr == '\0') { if (*endptr == '\0') {
if (omit_count == omit_size) { if (omit_count == omit_size) {
@ -265,7 +270,7 @@ static void add_to_omit_list (char *input_arg)
xwarnx(_("illegal omit pid value (%s)!\n"), omit_str); xwarnx(_("illegal omit pid value (%s)!\n"), omit_str);
} }
omit_str = strtok(NULL, ","); omit_str = strtok(NULL, ",;:");
} }
} }