205 lines
13 KiB
Plaintext
205 lines
13 KiB
Plaintext
|
|
Episode: 1162
|
||
|
|
Title: HPR1162: LiTS 021: killall
|
||
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr1162/hpr1162.mp3
|
||
|
|
Transcribed: 2025-10-17 20:48:21
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
Welcome to Linux in the Shell Episode 20, the Kill All Command.
|
||
|
|
My name is Dan Washco, I will be your host, and as always I'd like to thank Hacker Public
|
||
|
|
Radio for sponsoring this show and providing the website and hosting the audio files.
|
||
|
|
And Hacker Public Radio, it's a great community project, a show a day, during the week, great
|
||
|
|
stuff, great content, and always looking for contributors, so if you have an idea, head
|
||
|
|
on over to Hacker Public Radio and share it.
|
||
|
|
Let's talk about the Kill All Command.
|
||
|
|
Now in the past two episodes I've focused on Kill and P Kill and P Grab.
|
||
|
|
And Kill All is the third command I'll talk about in a similar vein of sending a signal
|
||
|
|
to a process.
|
||
|
|
And Kill All shares a lot of similarities between P Kill and some differences too.
|
||
|
|
So some of the stuff I'm going to gloss over because I covered it in more detail than
|
||
|
|
the other two commands, like exactly what the different signal processes are that you
|
||
|
|
can send to the process.
|
||
|
|
So let's jump right into it.
|
||
|
|
At the heart of it, Kill All just takes the Kill All and then the name of the process,
|
||
|
|
the command name of the process that you want to terminate.
|
||
|
|
For instance, Kill All X Term.
|
||
|
|
What it's going to do is just like P Kill, it's going to attempt to send the SIG term,
|
||
|
|
which is the default signal, signal number 15, we talked about all of them.
|
||
|
|
Default signal, SIG term, to all X term processes, just like P Grab or P Kill would.
|
||
|
|
And if it's successful, it doesn't usually output anything.
|
||
|
|
But if it fails or it can't kill it or there is no X term process, it'll report that there
|
||
|
|
aren't any processes or it couldn't kill the process.
|
||
|
|
Now, like any other command, you have to have permission to kill the process that you're
|
||
|
|
running.
|
||
|
|
So if you're a standard user and you're trying to kill the process of another user, it's
|
||
|
|
not going to work.
|
||
|
|
Now, if you're a root, you can kill everybody's processes, even your own.
|
||
|
|
So just be careful of that security measure in place that you can only kill the processes
|
||
|
|
that you have control over, or if you have some way to gain elevated privileges like
|
||
|
|
Sudo or SU in the root who has those privileges, you will be able to kill anybody's processes.
|
||
|
|
Now, Kill All operates on kind of like P Kill does, that it doesn't just necessarily work
|
||
|
|
on one process, one instance of the process, it's going to work on all instances of the
|
||
|
|
process executed by the command name that you specify.
|
||
|
|
Kill All has a limitation of 15 characters of the command name.
|
||
|
|
So if for instance you have two commands that are different, but share the same 15 characters
|
||
|
|
and exceed 15 characters in length, Kill All will kill both of those or attempt to kill
|
||
|
|
both of those, even though they may be different.
|
||
|
|
Now that can be augmented and actually prevented from happening by using the dash E or the
|
||
|
|
dash dash exact option, that switch right there, that will explicitly match the first
|
||
|
|
15 characters and if the command exceeds the 15 characters, it's not going to kill those
|
||
|
|
processes.
|
||
|
|
So it will prevent that 15 character limitation process from happening.
|
||
|
|
Also one good thing to do with the Kill All Command if you want to is the dash V or the
|
||
|
|
dash dash verbose and what that does is it will report exactly what Kill All is going
|
||
|
|
to do or has done actually not going to do it is going to has done.
|
||
|
|
So when you kill a process, it will report the list of processes, the process ID and report
|
||
|
|
that it's the signal it's sent to.
|
||
|
|
So you can see what signal it sends by doing the dash V and that's pretty handy.
|
||
|
|
Now you can put Kill All into an interactive mode with the dash I or dash dash interactive
|
||
|
|
and what will happen is before it actually sends the signal, it will prompt you for confirmation.
|
||
|
|
The default is an end so if you just hit enter, it's going to send no, it won't send
|
||
|
|
the signal but you hit Y for yes and it will then kill that or send that signal to the
|
||
|
|
process.
|
||
|
|
Again the default signal just like all the other Kill commands is SIG term or dash 15,
|
||
|
|
I'm going to SIG term ID is 15, you can change the signal in a variety of ways, similar
|
||
|
|
to Kill and P Kill with the dash I or dash dash signal command right there switch.
|
||
|
|
Then you can specify either the number like nine for the Kill process or SIG Kill or
|
||
|
|
just Kill, similarly you could do Kill all dash nine, Kill all dash SIG Kill or Kill
|
||
|
|
all dash Kill and that all does the same thing as the dash S with the process ID or the
|
||
|
|
signal that you're sending.
|
||
|
|
So it's a Kill all shares that same functionality in there.
|
||
|
|
Another shared functionality is the dash L or dash dash list which will list all known
|
||
|
|
signal names.
|
||
|
|
Now unlike the other processes, Kill and P Kill, it'll only list the names of the signals
|
||
|
|
without the SIG prefix on it so you're just getting the names of the signals.
|
||
|
|
So it's not as verbose or flexible as it is and Kill just be aware of that.
|
||
|
|
Kill all has a quiet mode, dash Q or dash dash, quiet what that does is it suppresses the
|
||
|
|
output of a non-successful iteration of the command.
|
||
|
|
So if you did Kill all dash Q X term and there was no X term process running or you didn't
|
||
|
|
have permissions, it would suppress the output of the Kill all command.
|
||
|
|
Very, very, very simple command to use.
|
||
|
|
Couple switches for how to handle which processes to Kill.
|
||
|
|
Again, like I said, Kill all is pretty exclusive of the command name.
|
||
|
|
So if you do X term, you're going to Kill all X terms.
|
||
|
|
Now it has even more flexibility with being able to handle regular expressions with the
|
||
|
|
dash R or the dash dash Reg XP.
|
||
|
|
So if you were to do Kill all dash R space term, it's going to search in all the processes
|
||
|
|
for any process that has term in the name.
|
||
|
|
So not only will it Kill X term, A term, Gnome term, Gnome dash term is, I think what it
|
||
|
|
actually is, Gnome dash, sorry, Gnome dash terminal or dash E term, I'm, yeah, dash E,
|
||
|
|
it's E term with a capital E term.
|
||
|
|
It will kill all those processes right there if you just do regular expression R. Similarly,
|
||
|
|
if you want to do a wild card character, you will probably have to escape it with a
|
||
|
|
black backslash.
|
||
|
|
So Kill all dash R, backslash, asterisk, term will again work just like killing term
|
||
|
|
did itself.
|
||
|
|
It will kill any process that has term in it.
|
||
|
|
Now you can do something like Kill all dash R, open bracket, not curly bracket, open
|
||
|
|
bracket, A, X, close bracket, term, and that will only kill any process called A term
|
||
|
|
or X term.
|
||
|
|
It will not kill E term or Gnome terminal, Gnome dash term.
|
||
|
|
So regular expressions can be used.
|
||
|
|
Another way to limit or expand on what Kill all can, execute is Kill all dash U or dash
|
||
|
|
user and that will only kill the processes specified or kill the process of the specified
|
||
|
|
user.
|
||
|
|
So for example, Kill all dash U, space, Dan will kill all the processes or send the
|
||
|
|
signal, SIG term to all the processes owned by user Dan.
|
||
|
|
Of course, you can limit that by specifying the name of the command, also Kill all dash
|
||
|
|
U, Dan, space, X term, but only kill X term processes under the user Dan.
|
||
|
|
So be aware of that further limitation.
|
||
|
|
But if you just did the user name, it would kill, offer to kill all the processes under
|
||
|
|
that user's control.
|
||
|
|
Here's a process group, ID that you can pass, which is the dash G or the dash dash process
|
||
|
|
dash group.
|
||
|
|
Now this works a little differently than you might expect, you're not going to pass
|
||
|
|
a group ID.
|
||
|
|
Oh, before I forget, when using user, dash user, ID, you have to specify the user name.
|
||
|
|
It doesn't accept the user ID or at least the versions of Kill all that I have used do
|
||
|
|
not accept it.
|
||
|
|
Be aware of that.
|
||
|
|
Now back to process group with the dash G or dash, dash process, dash group.
|
||
|
|
You can get the process group ID through top or PS or whatever.
|
||
|
|
And you can see what process group, a specific process is that you want to kill.
|
||
|
|
Now the way that this works is you specify the process group ID.
|
||
|
|
And what that will do is it will kill.
|
||
|
|
You would think that you would specify the process group ID and it would kill any processing
|
||
|
|
that process group ID.
|
||
|
|
No, that's not how it works.
|
||
|
|
You say dash G and then X term and what it does is it looks at the X term process or multiple
|
||
|
|
X term processes that are in there.
|
||
|
|
And it will kill all the processes that are in the same process group ID as the X term.
|
||
|
|
So be very careful with that.
|
||
|
|
It's going to take the command and look at the process group ID it's in and attempt to
|
||
|
|
kill all those processes in that process group ID.
|
||
|
|
It's not you specifying a process group ID.
|
||
|
|
It's you specifying a process command that's in that and it kills the process group ID.
|
||
|
|
So just be aware of that.
|
||
|
|
Again, if you are not careful, you could easily go and wipe out the entire process group
|
||
|
|
ID for not only your user, but all other users on the system.
|
||
|
|
If you have permission to do so, like as root.
|
||
|
|
If you executed kill all dash G X term, it would look for all of the X term processes
|
||
|
|
in there and their process group ID and kill every process in that process group ID.
|
||
|
|
Pretty much wiping out most of the session of any other user that's in that on that
|
||
|
|
system that might be using X also had an X term open.
|
||
|
|
So just be very careful.
|
||
|
|
It can be very dangerous, more dangerous than just kill all in a process.
|
||
|
|
There are two time related options.
|
||
|
|
One is dash O or dash dash older dash then and dash Y or dash dash younger dash then.
|
||
|
|
And when it works is you provide a time stamp.
|
||
|
|
Time stamp is in the format of a floating point number and a time reference, a time code.
|
||
|
|
We'll call it time code, so to speak.
|
||
|
|
Now those time codes are S for seconds, M for minutes, H for hour, D for day of the
|
||
|
|
month, W for weeks, capital M for month and Y for year.
|
||
|
|
All right, so the way that you specify it is, let's say you wanted to kill all process or kill
|
||
|
|
off an X term process that was started after 10 30 AM on December 31st, 2012, well, you
|
||
|
|
can specify.
|
||
|
|
So you want to after it was all those that are after.
|
||
|
|
So it's got to be younger than the time stamp.
|
||
|
|
So that would be dash Y and then the format would basically be 10 M 30, I'm sorry, 10 H
|
||
|
|
for hour, 30 M from 30 minutes.
|
||
|
|
You don't have to specify seconds, but you can say zero, zero, ask for seconds.
|
||
|
|
And then 12, capital M for 12 month, 31 D for the 31st day and 2012 Y for the year.
|
||
|
|
So that's how you specify it and then X term.
|
||
|
|
So it's number and then time label, again, like 10 M would be the 10th minute, 10 H would
|
||
|
|
be the 10th hour, very simple, little kind of clergy when you think about it, but it's
|
||
|
|
very simple.
|
||
|
|
It's not that hard to remember, kill all, dash W or W dash, dash, wait, what that will
|
||
|
|
do is instead of the way kill all would actually work is it would kill all X term would send
|
||
|
|
the signal to all the X term processes running and then exit.
|
||
|
|
Whereas if you do the dash W, kill all is going to go into a waiting state and it's going
|
||
|
|
to send the signal and make sure it gets a response from those processes, which could
|
||
|
|
cause kill all the hang indefinitely if the process is not accepting signals or isn't
|
||
|
|
a zombie state that's ignoring the signal.
|
||
|
|
And so you'd have to manually kill it there, but it would kill all would just not stop.
|
||
|
|
It would just keep attempting to see whether or not the process died checking once per
|
||
|
|
second and it could end up in a loop.
|
||
|
|
That pretty much covers kill all except for one other option, which is SE Linux only.
|
||
|
|
That's the dash capital Z or dash dash context.
|
||
|
|
And what that does is you're allowed to specify a security context.
|
||
|
|
So it will only kill the processes having the serity context that match the ID that you
|
||
|
|
given.
|
||
|
|
Now you can do the ID or the context as a specific ID or you can do a regular expression
|
||
|
|
of the context and also be aware that in order to use the dash Z or context option, you
|
||
|
|
have to specify that as the first argument.
|
||
|
|
Other command names are optional.
|
||
|
|
Other arguments are optional, but that one has to be in the first argument to the kill
|
||
|
|
all command.
|
||
|
|
So that's it folks.
|
||
|
|
That's kill all in a nutshell right there.
|
||
|
|
Head on over to the website for the full write up, the bibliography and the watch the
|
||
|
|
video.
|
||
|
|
And again, I thank you for listening and I thank Hacker Public Radio for hosting the
|
||
|
|
sites.
|
||
|
|
You have been listening to Hacker Public Radio at Hacker Public Radio.
|
||
|
|
We are a community podcast network that releases shows every weekday Monday through Friday.
|
||
|
|
Today's show, like all our shows, was contributed by a HBR listener like yourself.
|
||
|
|
If you ever consider recording a podcast, then visit our website to find out how easy
|
||
|
|
it really is.
|
||
|
|
Hacker Public Radio was founded by the Digital Dark Pound and the Infonomicom Computer
|
||
|
|
Club.
|
||
|
|
HBR is funded by the Binary Revolution at binref.com, all binref projects are crowd-responsive
|
||
|
|
by lunar pages.
|
||
|
|
From shared hosting to custom private clouds, go to lunarpages.com for all your hosting
|
||
|
|
needs.
|
||
|
|
Unless otherwise stasis, today's show is released under a creative commons, attribution,
|