How to detail just non - <defunct> procedures?

Exists a mix of command - line alternatives for ps or pgrep or a few other reasonably straight means to establish if a certain process name is in fact running (readily available for regular usage).

By "running", I suggest to especially exclude procedures which are <defunct> or any kind of various other non - running procedures (eg. zombies ...

This example manuscript reveals an instance of <defunct> things :

#!/bin/bash   ubuntu 10.04

  pgrep ^gnuserv$
# 25591
# 25599
# 27330

  ps $(pgrep ^gnuserv$)  # command ammended as per pilcrow's good suggestion
# 25591 ?        Zs     0:00 [gnuserv] <defunct>
# 25599 ?        Zs     0:00 [gnuserv] <defunct>
# 27330 pts/2    S+     0:00 gnuserv

I can better sed the output, yet I think/hope there is an extra straight means ...

2019-12-02 03:09:21
Source Share
Answers: 2

you can attempt with the - v alternative of grep which negate the regex similar to this :

for p in $(pgrep ^gnuserv$) ;do ps x |grep "^$p" | grep -v \<defunct\> ;done
2019-12-03 05:06:17

In your comment you make clear :

I'm in fact seeking a solitary action alternative to ps or pgrep (or comparable) which just outputs "active" procedures ...

I'm worried you run out good luck with existing ps/pgrep executions.

Blog post filtering system similar to this relies upon a complete understanding of the intial result, which I do not have ...

But you can get that understanding and also, even better, control that result as wanted. Attempt something similar to this :

function pgrep_live {
  pids=$(pgrep "$1");
  [ "$pids" ] || return;
  ps -o s= -o pid= $pids | sed -n 's/^[^ZT][[:space:]]\+//p';

That will certainly return the pids for any kind of pgrep would certainly procedures matching your input string, which procedures are "available for regular usage, " that is, neither dead+unreaped ( Z ) neither quit ( T ).

2019-12-03 05:01:34