Shell-Feinheiten mit which, type und kill (war: Re: Nerviges Startup-Fenster)
Am Montag, 6. Februar 2017, 10:31:58 CET schrieb Christian Knoke:
> Martin Steigerwald schrieb am 05. Feb um 23:25 Uhr:
> > Am Sonntag, 5. Februar 2017, 18:10:07 CET schrieb Andreas Tille:
> > > Deine Prozesse auflisten lassen. Dann weißt Du wenigstens, wer der
> > > Störenfried ist. Zur Not dann auch killen mit
> > >
> > > kill -9 PID
> >
> > Das ruft den Dozenten in mir wach.
> >
> > Kein kill -9, wenn es ein reguläres TERM-Signal auch tut. Bei einem KILL-
> > Signal gibt der Kernel dem Prozess keine Chance mehr etwaige noch
> > ungespeicherte Daten zu speichern. Also erstmal kill mit Standard-Signal
> > und dann falls der Prozess nicht reagiert und es wirklich wichtig ist,
> > ihn zu entsorgen und ein möglicher Datenverlust vertretbar ist, dann mit
> > KILL-Signal.
> es gibt auch noch harmlosere Signale, die man einem Prozess schicken kann,
> und durchaus Programme, die darauf hören. kill -HUP zum Beispiel.
Jaja, hab HUP beendet ein Programm in der Regel nicht, was ja hier das Ziel
war.
> Das führt mich dann zu einer Sache, die mir zum erstenmal vor ein paar
> Wochen auffiel:
>
> kill -L gab bei mir immer eine Liste, in Tabellenform, der möglichen
> Signale.
>
> Das funktioniert jetzt nicht mehr. Auch die Option in der Langform
> kill --table geht nicht.
Z-Shell:
merkaba:~> which -a kill
kill: shell built-in command
/bin/kill
merkaba:~> kill -L
kill: unknown signal: SIGL
kill: type kill -l for a list of signals
merkaba:~> /bin/kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
Interessante hat sich die Z-Shell das dann gemerkt:
merkaba:~> kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
Bash:
martin@merkaba:~> bash
martin@merkaba:~ -> which -a kill
/bin/kill
martin@merkaba:~ -> type kill
kill ist eine von der Shell mitgelieferte Funktion.
martin@merkaba:~ -> kill --table
bash: kill: -table: Ungültige Signalbezeichnung.
martin@merkaba:~ -> kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN
+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52)
SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
martin@merkaba:~ -> /bin/kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
martin@merkaba:~ -> help kill
kill: kill [-s Signalname | -n Signalnummer | -Signalname] [pid | job] ...
oder kill -l [Signalname]
Send a signal to a job.
Send the processes identified by PID or JOBSPEC the signal named by
SIGSPEC or SIGNUM. If neither SIGSPEC nor SIGNUM is present, then
SIGTERM is assumed.
Options:
-s sig SIG is a signal name
-n sig SIG is a signal number
-l list the signal names; if arguments follow `-l' they are
assumed to be signal numbers for which names should be listed
-L synonym for -l
Kill is a shell builtin for two reasons: it allows job IDs to be used
instead of process IDs, and allows processes to be killed if the limit
on processes that you can create is reached.
Exit Status:
Returns success unless an invalid option is given or an error occurs.
martin@merkaba:~ ->
> Die man page listet beide Optionen aber noch. Die bash könnte einen kill
> Befehl eingebaut haben, wäre mir aber neu, steht auch nicht in man bash.
>
> :~$ alias
>
> alias ls='ls --color=auto'
>
> :~$ which kill
>
> /bin/kill
Mach mal
type kill
Unter der Bash liefert which keine Informationen über in die Shell eingebaute
Befehle, da für die Bash der externe Which-Befehl zum Einsatz kommt, während
Z-Shell den Befehl eingebaut hat – der in die Bash eingebaute ähnliche Befehl
ist "type":
Z-Shell:
merkaba:~> which which
which: shell built-in command
Bash:
martin@merkaba:~> bash
martin@merkaba:~ -> which which
/usr/bin/which
martin@merkaba:~ -> type which
which is hashed (/usr/bin/which)
"kill" ist in die Bash eingebaut, kann mit Bash 4.4-4 Debian-Paket in
Unstable jedoch "-l", nicht jedoch "--table".
Ich vermute Du hast eine ältere Bash und da kann das eingebaute Kill noch kein
"kill -l" oder Du verwendest ebenfalls eine Z-Shell oder eine andere Shell, wo
kill das nicht kann.
> :~$ /bin/kill --table
>
> 1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS
> 8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM
> 15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN
> 22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH
> 29 POLL 30 PWR 31 SYS
>
> Was ist da los?
Das ist der externe kill-Befehl, nicht der in die Shell eingebaut.
Ciao,
--
Martin
Reply to: