0 Ich habe ein sehr kurzes Skript geschrieben, das PID von $ 1 bekommt, dann tötet den Prozess. Ich habe ein paar Fragen/Verbesserungswünsche. (OSX)Verwenden von ps und awk, um pid zu bekommen, und dann
#!/bin/bash
getpid=$(ps aux -O start | grep -i "$1" | grep -v grep | grep -v $0 | awk '{ if (NR==1) {print $2}}')
kill $getpid
Zum Beispiel:
$ ~/killpro.sh java
, die die jüngste Instanz von Java tötet.
Oder:
$ ~/killpro.sh chrome
zu töten Google Chrome, offensichtlich.
Erstens ist es eine praktische Möglichkeit, diese zusammen zu einer einzigen Linie aufgereiht werden, vielleicht mit lesen -p, so dass es wiederum aliased und so etwas wie werden kann:
$ killpro
$ Enter name: chrome
$
Nicht, dass es wesentlich einfacher, in der Tat ist es etwas mehr Arbeit, aber es umgeht die Notwendigkeit, einen Pfad und Shell-Erweiterung, die wünschenswert ist, eingeben.
Zweitens, gibt es irgendetwas grundsätzlich falsch mit meinem ursprünglichen Ansatz/fehlt mir etwas Offensichtliches, das die Notwendigkeit für das alles negiert?
Jede Rückmeldung wird geschätzt.
Vielen Dank im Voraus, ich bin (wie Sie sagen) neu zu diesem Thema.
Hat OS X nicht einen 'killall' oder' pidof' Befehl? – melpomene
@melpomene: Es hat 'killall', aber es kann nicht nur den neuesten Prozess töten. Kein 'Pidof', aber es ist leicht genug zu implementieren. – Amadan
Shell-Skripte können beliebigen Namen haben. Die Erweiterung '.sh' dient nur dazu, anzuzeigen, was drin ist. Sie könnten 'file killpro' verwenden und es würde etwas wie' shell script' melden. Also nenne einfach dein Skript 'killpro'. DANN brauchst du ein lokales Verzeichnis, normalerweise '~/usr/local/bin', um dein Skript zu speichern UND dein' .bashrc' oder anderswo zu editieren, um 'export PATH =" ~/usr/local/bin: $ PATH "' anzuzeigen. Dann sind keine lästigen Funktions- oder Aliasdefinitionen erforderlich. Gib einfach 'killpro' ein und es wird ausgeführt. Viel Glück. – shellter