By using "ucbps" command i am able to get all PIDs
$ ucbps
Userid PID CPU % Mem % FD Used Server Port
=========================================================================
512 5783 2.50 16.30 350 managed1_adrrtwls02 61001
512 8896 2.70 21.10 393 admin_adrrtwls02 61000
512 9053 2.70 17.10 351 managed2_adrrtwls02 61002
I want to do it like this, but don't know how to do
- variable=get pid of process by processname.
- Then use this command kill -9 variable.
6 Answers 6
If you want to kill -9 based on a string (you might want to try kill first) you can do something like this:
ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " 1ドル}'
This will show you what you're about to kill (very, very important) and just pipe it to sh when the time comes to execute:
ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " 1ドル}' | sh
2 Comments
pids=$(pgrep <name>)
will get you the pids of all processes with the given name. To kill them all, use
kill -9 $pids
To refrain from using a variable and directly kill all processes with a given name issue
pkill -9 <name>
8 Comments
-9, used to send SIGKILL, is not required, but mentioned in the question. Without it, the less violent SIGTERM (Signal number 15) will be sent.On a single line...
pgrep -f process_name | xargs kill -9
1 Comment
-f parameter could be helpful here ` -f The pattern is normally only matched against the process name. When -f is set, the full command line is used.` pgrep -f process_name | xargs kill -9Another possibility would be to use pidof it usually comes with most distributions. It will return you the PID of a given process by using it's name.
pidof process_name
This way you could store that information in a variable and execute kill -9 on it.
#!/bin/bash
pid=`pidof process_name`
kill -9 $pid
Comments
Solution (Exact Process Name Match)
pgrep -x <process_name> | xargs kill -9
(incidentally, for this specific use case, might as well do pkill -9 -x <process_name>, but the question asked how to get the PID in general)
Details
The problem with the accepted answer (and all other answers) is that pgrep without -x (or manually ps | grep, or, for some reason, pidof) will match processes for which the <process_name> term is a substring.
So, for example, pgrep installd matches, on my machine (macOS 13.0 22A380 arm64) now:
❯ pgrep -l installd
316 uninstalld
33158 system_installd
33160 installd
I obviously only want 33160, not the other ones.
For some reason, pidof has the same issue:
❯ pidof installd
316 33158 33160
pregp -x is the the only viable solution (beyond messing around with regexes with the ps | grep solution, I suppose)
❯ pgrep -xl installd
33160 installd
Comments
use grep [n]ame to remove that grep -v name this is first... Sec using xargs in the way how it is up there is wrong to run whatever it is piped you have to use -i (interactive mode) otherwise you may have issues with the command.
ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " 1ドル}'?
ps aux | grep [n]ame | awk '{print "kill -9 " 2ドル}'? isn't that better?