[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: