Operating System - HP-UX
1748216 Members
3952 Online
108759 Solutions
New Discussion юеВ

Re: Shell script that finds a process by name, then kills

 
SOLVED
Go to solution

Shell script that finds a process by name, then kills

If if anyone can help me out it would be greatly helpful.

I need to create a cron that will do the following:

# ps -ef | grep GLB.JOB*
bnk 15855 1 0 Mar 10 ? 0:20 jsh -Jb -c EX EB.PHANTOM.PH MIA.
OFS.USER GLB.JOBBL
root 3208 23349 0 12:10:09 pts/tp 0:00 grep GLB.JOB*
#
Then to kill the PID in this case its 15855

16 REPLIES 16
Pete Randall
Outstanding Contributor
Solution

Re: Shell script that finds a process by name, then kills

kill `ps -ef |grep GLB.JOB |grep -v grep |awk '{print $2}'`


Pete

Pete
Steven Schweda
Honored Contributor

Re: Shell script that finds a process by name, then kills

A Forum search for keywords like:
ps grep kill
would find many examples, including some
cautions.

Re: Shell script that finds a process by name, then kills

Steven thanks for the heads up. I do see some risks using grep to find process name.
James R. Ferguson
Acclaimed Contributor

Re: Shell script that finds a process by name, then kills

Hi Chris:

If you are running 11.31, look at 'pkill'.

If you are not running 11.31, make sure you match the process _exactly_ by name:

# kill $(UNIX95= ps -C GLBJOB -o pid=)

...note that there is _whitespace_ following 'UNIX95=' so that this mode is armed _only_ for the duration of the command line.

Regards!

...JRF...
Dennis Handly
Acclaimed Contributor

Re: Shell script that finds a process by name, then kills

>JRF: # kill $(UNIX95= ps -C GLBJOB -o pid=)

This won't work because GLB.JOB is a parm, not the name (jsh).

>note that there is _whitespace_ following 'UNIX95=

Instead of explaining this each time, I use:
UNIX95=EXTENDED_PS ps ...
James R. Ferguson
Acclaimed Contributor

Re: Shell script that finds a process by name, then kills

Hi (again):

> Dennis: This won't work because GLB.JOB is a parm, not the name (jsh).

Ah, yes, so this should read:

# kill $(UNIX95= ps -C jsh -o pid=)

...since the request is to "...finds a process by name, then kills...:

Regards!

...JRF...
Hein van den Heuvel
Honored Contributor

Re: Shell script that finds a process by name, then kills

UNIX95 looking for process by name is the way to go.

But I have to admi that I do still too often search through ps -ef output.

If I do, then I prefer to have awk do all the work. I like to test with an echo statement first, then go for the kill:

$ ps -ef | awk '/GLB.JOB/ {system( "echo -9 " $2)}'

$ ps -ef | awk '/GLB.JOB/ {system( "kill -9 " $2)}'


fwiw,
Hein.
Steven Schweda
Honored Contributor

Re: Shell script that finds a process by name, then kills

> [...] I like to test with an echo statement
> first, [...]

I'd be very reluctant to automate a job like
this fully, and then schedule it to run
periodically. I have an old, lame (ps+grep)
script ("/misc/kil") which displays the "ps"
line, and then asks the user for confirmation
before whacking anyone.

There are some good reasons to save a process
ID in a file somewhere when starting a job,
and then (after a quick validity check)
whacking that PID instead of trying to divine
the right PID later. Call me a coward.
dirk dierickx
Honored Contributor

Re: Shell script that finds a process by name, then kills

pgrep and pkill commands will help. for this purpose pkill is a single command that basically does the ps, grep and kill commands all in one.