Wie zu töten postgres-Prozesse, die nicht sterben?
Habe ich die folgenden Prozesse laufen pro ps aux | grep postgres
postgres 8720 0.0 0.0 2492848 5652 ?? SN 2:33
0:00.04
/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/versions/A/Support/mdworker
-s mdworker -c MDSImporterWorker -m com.apple.mdworker.gemeinsame postgres 495 0.0 0.0 2514428 1776 ?? S 1:57PM 0:00.07
/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/versions/A/Support/mdflagwriter
postgres 491 0.0 1.0 2669764 166180 ?? Ss 1:57PM
0:10.31 com.apple.IconServicesAgent postgres 490 0.0 0.0
2505832 2884 ?? Ss 1:57PM 0:00.07 /usr/libexec/xpcd postgres
485 0.0 0.0 2514284 1284 ?? S 1:57PM 0:00.07
/usr/sbin/cfprefsd agent postgres 484 0.0 0.0 2536788
1708 ?? S 1:57PM 0:00.06 /usr/sbin/distnoted agent postgres
479 0.0 0.0 2508256 1100 ?? Ss 1:57PM 0:00.06
/sbin/launchd postgres 427 0.0 0.0 2493792 608 ??
Ss 1:55 UHR 0:00.02 postgres: stats-collector-Prozess postgres
426 0.0 0.0 2654624 2208 ?? Ss 1:55 UHR 0:00.02 postgres:
autovacuum-launcher-Prozess postgres 425 0.0 0.0
2646300 764 ?? Ss 1:55 UHR 0:00.03 postgres: wal Autor
Prozess postgres 424 0.0 0.0 2638108 1608 ?? Ss
1:55 UHR 0:00.07 postgres: Schreiber-Prozess postgres 423
0.0 0.0 2638108 836 ?? Ss 1:55 UHR 0:00.00 postgres: checkpointer Prozess postgres 419 0.0 0.0 2493792
500 ?? Ss 1:55 UHR 0:00.00 postgres: logger Prozess postgres
85 0.0 0.1 2638108 13844 ?? Ss 1:55 UHR 0:00.04
/Library/PostgreSQL/9.3/bin/postmaster -D/Library/PostgreSQL/9.3/data
Benutzername 8910 0.0 0.0 2432784 612 s003 R+ 2:35PM
0:00.00 grep postgres
Ich will, dass Sie tot!
Aber killall postgres gibt mir:
No matching processes belonging to you were found
Ich verstehe, dass ich brauchen, um zu verwenden:
kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
Aber ich verstehe nicht, diesem Befehl.
Beratung wird sehr geschätzt. Lange frustrierend morgen!
kill -9 8720
(wo 8720
ist der PID)? Beachten Sie, dass dies Datenverlust führen kann, da das OS wird den Prozess abtöten in einer sehr unfreundlichen Art und Weise.Danke. Das war es.
Cool. Ich werde eine detaillierte Antwort.
Und jetzt funktioniert es nicht. So eigenartig.
Ich habe ein paar extra Hinweise auf meine Antwort, das könnte erklären, warum es nicht funktioniert manchmal. Sehen Sie, wenn Sie helfen.
InformationsquelleAutor Learning stats by example | 2014-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, Sie können die
kill
- Befehl zum beenden von Laufenden Prozessen. Genauer gesagtkill
sendet Signale an Prozesse. Die meisten basic-kill-Befehl ist so etwas wie dieses:kill <pid>
Dieser sendet die
SIGTERM
signal an den Prozess, Ihnen zu sagen, Sie zu stoppen.Gelegentlich werden Sie einen Prozess, der wirklich stecken, und scheint nicht zu reagieren SIGTERM. In diesem Fall können Sie sagen, die
kill
- Befehl, um es ein wenig (oder, wissen Sie, eine Menge) mehr gewaltsam by doing:kill -9 <pid>
oder, was dasselbe ist,kill -KILL <pid>
Dieser sendet die
SIGKILL
signal an den Prozess, die Wirkung von denen ist (sehr allgemein), dass der OS sofort nimmt der Vorgang aus der run-queue und beendet es. Dies kann, im Allgemeinen, etwas dangerious, da es nicht geben den das Programm die änderung zu "reinigen" oder der Ausführung in jeder Art von einem vernünftigen Weg. Es ist einfach buchstäblich Stoppt es sofort.Finden Sie weitere Informationen über
kill
auf Wikipedia, oder in der Mann Seiten (man kill
auf Ihrem lokalen Rechner). Der Befehl ist ziemlich standard über Linux, UNIX, BSD und OS X, so sollte die Dokumentation gelten mehr oder weniger zu dieser.Darüber hinaus finden Sie weitere Informationen darüber, was die unterschiedlichen Signale sollen auf Wikipedia als gut.
Als zusätzlichen bonus, ich finde, dass dieses Lied hat mich davon abgehalten, jemals zu vergessen, wie dieser Befehl funktioniert.
BEARBEITEN: Manchmal gibt es Prozesse, die nur können nicht getötet werden. Eine der häufigsten Situationen, in denen dies erfolgt ist, wenn der Prozess in der
D
Zustand (sieheSTAT
- Spalte in der Ausgabe vonps axu
). Dieser Zustand bedeutet, dass der Prozess Unterbrechungsfreie, meist, weil es zu warten, für einige I/O-operation zu beenden, dass wird nie, aus verschiedenen Gründen. Mehr Informationen hier.Noch ein Hinweis: manchmal tötet ein Prozess nicht funktioniert, weil Sie brauchen, um zu töten die übergeordneten Prozess, nicht in irgendeinem Arbeitsprozess ist es
fork
'ed. Sie können sehen, den Prozess "bietet" (d.h., die Eltern/Kind-Beziehungen) mit dem Befehlps axjf
. Sie können mehr Informationen über dasps
Befehl in der Mann Seite (man ps
auf Ihrem lokalen Rechner). Wie beikill
, dieps
Befehl ist ziemlich standard, so dass die Dokumentation sollte vor allem gelten für alle von den verschiedenen UNIX-artigen Betriebssysteme.InformationsquelleAutor CmdrMoozy
Alternativ fand ich dieses Antwort das problem bei mir gelöst.
Töten alle Prozesse namens 'postgres'
InformationsquelleAutor Luke Singham