2017-04-13 8 views
2

Ich muss UID PID drucken PPID PRI NI VSZ RSS STAT TTY TIME Spalten mit PS Prozesse mit typisierten Namen.bash ps drucken Informationen über Prozess mit Namen

GNU nano 2.0.6              
    File: file2                               

    ps o uid,pid,ppid,ni,vsz,rss,stat,tty,time | grep $2 > $1 
    cat $1 
    echo "enter pid of process to kill:" 
    read pid 
    kill -9 $pid 

Aber es druckt nichts, wenn ich diesen Befehl mit dem Argument verwenden $ 2 = bash (dieser Prozess existiert)

UPDATE

GNU nano 2.0.6        
    File: file2 

ps o uid,pid,ppid,ni,vsz,rss,stat,tty,time,command | grep $2 | awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9}' > $1 
cat $1 
echo "enter pid of process to kill:" 
read pid 
kill -9 $pid 

Dies funktioniert für mich, aber eigentlich diese Lösung IMHO ist nicht der beste. Ich benutze den Befehl shadow column nach dem Namen grep und drucke alle Spalten mit Ausnahme des Befehls.

+0

Sie die 'comm' Spalt (' comm' verpaßt haben - nur die Befehlsnamen - am besten für 'grep bash',' cmd' - Befehl mit Argumenten, 'grep bash' würde fail) –

+0

Anstelle des langen Befehls 'awk' können Sie 'cut -d ',' -f-9' verwenden. Besser als das, um 'awk' /' cut' zu vermeiden, können Sie 'ps ouid, pid, (...), tty, Zeit $ (pgrep $ 2)' – silel

Antwort

1

Sie können immer den zweistufigen Ansatz verwenden.

1.) finden Sie die gewünschte PID s. Dazu ein möglichst einfache ps

ps -o pid,comm | grep "$2" | cut -f1 -d' ' 

die ps -o pid,comm druckt nur zwei Spalten verwenden, wie:

67676 -bash 
71548 -bash 
71995 -bash 
72219 man 
72220 sh 
72221 sh 
72225 sh 
72227 /usr/bin/less 
74364 -bash 

so greppen es einfach ist, (und geräusch weniger, ohne falschen Trigger). Die extrahiert nur die PIDs. Z.B. die

ps -o pid,comm | grep bash | cut -f1 -d' ' 

druckt

67676 
71548 
71995 
74364 

2.) und jetzt können Sie die gefundenen PIDs zum anderen ps füttern die -p Flag verwendet, so dass der vollständige Befehl lautet:

ps -o uid,pid,ppid,ni,vsz,rss,stat,tty,time,command -p $(ps -o pid,comm | grep bash | cut -f1 -d' ') 

Ausgang

UID PID PPID NI  VSZ RSS STAT TTY   TIME COMMAND 
    501 67676 67675 0 2499876 7212 S+ ttys000 0:00.04 -bash 
    501 71548 71547 0 2500900 8080 S ttys001 0:01.81 -bash 
    501 71995 71994 0 2457892 3616 S ttys002 0:00.04 -bash 
    501 74364 74363 0 2466084 7176 S+ ttys003 0:00.06 -bash 

z.B. die Lösung der $2 verwendet, ist

ps -o uid,pid,ppid,ni,vsz,rss,stat,tty,time,command -p $(ps -o pid,comm | grep "$2" | cut -f1 -d' ') 
+0

verwenden Danke! Es funktioniert wirklich für mich, nette Lösung! –