mhoffman@infocenter.UUCP (Mike Hoffman) (06/15/89)
I have an application in which I need to check to see if a process
is currently active. The only method I have been able to devise
is the "#" option of "ps", as in "ps #1234" which will print out
a header, then the information on process 1234:
% ps #1234
PID TT STAT TIME COMMAND
1234 117 IW 0:00 foo bar baz
If process 1234 is not active, I get just the first line (the
column headers), and there is nothing else.
What I do, more or less, is:
isactive(pid)
open pipe
fork
if (child)
redirect stdout to pipe
execl ("bin/ps","ps","#pid",0)
else
read(pipe,sizeof(header line))
if (anything else to read)
return(process is active)
else
return(process is not active)
This seems terribly clumsy, and I'm sure there is a better way :-(
It works, and seems dependable so far, but it seems to me that
if "ps #1234" can do it, then I should be able to do it as well.
Any help or suggestions will be appreciated. I hope this won't
generate as many answers as "what does g/re/p mean?", but send
answers e-mail, if possible - I'll summarize if volume warrants
it.
m/ik/e
----
UUCP: {uunet,codas!novavax,sun,pur-ee}!gould!mhoffman
Michael J. Hoffman "My opinions cannot be confused
Manufacturing Engineering with those of my employer, as
Encore Computer Corporation I don't even know what those
opinions might be."wescott@ncrcae.Columbia.NCR.COM (Mike Wescott) (06/15/89)
In article <2727@infocenter.UUCP> mhoffman@infocenter.UUCP (Mike Hoffman) writes: > > I have an application in which I need to check to see if a process > is currently active. Try: isactive(pid) if(kill(pid,0)==0 || errno == EPERM) return(process is active) else return(process is not active) see kill(2). -- -Mike Wescott mike.wescott@ncrcae.Columbia.NCR.COM
cowan@marob.masa.com (John Cowan) (06/17/89)
In article <4608@ncrcae.Columbia.NCR.COM> wescott@ncrcae.Columbia.NCR.COM (Mike Wescott) writes: >In article <2727@infocenter.UUCP> mhoffman@infocenter.UUCP (Mike Hoffman) writes: >> >> I have an application in which I need to check to see if a process >> is currently active. > >Try: > >isactive(pid) > if(kill(pid,0)==0 || errno == EPERM) > return(process is active) > else > return(process is not active) > >see kill(2). > >-- > -Mike Wescott > mike.wescott@ncrcae.Columbia.NCR.COM That doesn't work on all flavors of Unix. Xenix supports it, so does SVR2, but definitely not in V7. I don't know about BSD. Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! Fascist inews! -- John Cowan <cowan@marob.masa.com> or <cowan@magpie.masa.com> UUCP mailers: ...!uunet!hombre!{marob,magpie}!cowan Fidonet (last resort): 1:107/711 Aiya elenion ancalima!