diff --git a/pidof.1 b/pidof.1 index f2544c8b..f49cd234 100644 --- a/pidof.1 +++ b/pidof.1 @@ -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 shells running the named scripts. .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" .TP .B 0 diff --git a/pidof.c b/pidof.c index a39a4c0c..72344e76 100644 --- a/pidof.c +++ b/pidof.c @@ -246,10 +246,15 @@ static void add_to_omit_list (char *input_arg) pid_t omit_pid; omit_str = NULL; - omit_str = strtok(input_arg, ","); + omit_str = strtok(input_arg, ",;:"); while (omit_str) { - omit_pid = strtoul(omit_str, &endptr, 10); + 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); + } if (*endptr == '\0') { 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); } - omit_str = strtok(NULL, ","); + omit_str = strtok(NULL, ",;:"); } }