如何杀死不会死的postgres进程?

Lea*_*ple 5 postgresql

我运行以下进程 ps aux | grep postgres

postgres 8720 0.0 0.0 2492848 5652 ?? SN 2:33 PM
0:00.04 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared postgres 495 0.0 0.0 2514428 1776 ?? S 1:57 PM 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:57 PM
0:10.31 com.apple.IconServicesAgent postgres 490 0.0 0.0 2505832 2884 ?? Ss 1:57 PM 0:00.07/usr/libexec/xpcd postgres 485 0.0 0.0 2514284 1284 ?? S 1:57 PM 0:00.07/usr/sbin/cfprefsd agent postgres 484 0.0 0.0 2536788
1708 ?? S 1:57 PM 0:00.06/usr/sbin/distnoted agent postgres
479 0.0 0.0 2508256 1100 ?? Ss 1:57 PM 0:00.06/sbin/launchd postgres 427 0.0 0.0 2493792 608 ?? Ss 1:55 PM 0:00.02 postgres:stats collector process postgres 426 0.0 0.0 2654624 2208 ?? Ss 1:55 PM 0:00.02 postgres:autovacuum launcher process postgres 425 0.0 0.0 2646300 764 ?? Ss 1:55 PM 0:00.03 postgres:wal writer process postgres 424 0.0 0.0 2638108 1608 ?? Ss 1:55 PM 0:00.07 postgres:writer process postgres 423
0.0 0.0 2638108 836 ?? Ss 1:55 PM 0:00.00 postgres:checkpointer process postgres 419 0.0 0.0 2493792
500 ?? Ss 1:55 PM 0:00.00 postgres:logger process postgres 85 0.0 0.1 2638108 13844 ?? Ss 1:55 PM 0:00.04 /Library/PostgreSQL/9.3/bin/postmaster -D/Library/PostgreSQL/9.3/data用户名8910 0.0 0.0 2432784 612 s003 R + 2:35 PM
0:00.00 grep postgres

我希望他们死了!

但是killall postgres给了我:

No matching processes belonging to you were found
Run Code Online (Sandbox Code Playgroud)

我明白我需要使用:

kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
Run Code Online (Sandbox Code Playgroud)

但我不明白这个命令.

指导表示赞赏.令人沮丧的早晨!

Cmd*_*ozy 7

通常,您可以使用该kill命令停止正在运行的进程.更具体地说,kill向进程发送信号.最基本的kill命令是这样的:

kill <pid>

这会将SIGTERM信号发送给进程,告诉他们停止.

有时候,你会遇到一个真正陷入困境的进程,而且似乎没有响应SIGTERM.在这种情况下,您可以通过kill执行以下操作告诉命令稍微(或者,您知道,很多)执行此操作:

kill -9 <pid> 或者,等效地, kill -KILL <pid>

这会将SIGKILL信号发送到进程,其效果(通常)是OS立即将进程从运行队列中取出并停止运行.一般来说,这可能有点危险,因为它不会给程序带来"清理"或以任何合理方式完成运行的变化.它只是立即停止它.

您可以killWikipedia手册页(man kill在本地计算机上)上找到有关Wikipedia的更多信息.该命令在Linux,UNIX,BSD和OS X中是相当标准的,因此文档应该或多或少地适用于任何这些.

此外,您还可以找到有关维基百科上不同信号的更多信息.

作为一个额外的好处,我发现这首歌让我无法忘记这个命令是如何工作的.

编辑:有时,有些进程无法被杀死.发生这种情况的最常见情况之一是进程处于D状态时(请参阅STAT输出中的列ps axu).这种状态意味着该进程是不可中断的,通常是因为它等待一些I/O操作完成,因为各种原因永远不会.更多信息在这里.

另一个注意事项:有时候杀死一个进程是行不通的,因为你需要杀掉一个父进程,而不是某个工作进程被它fork编写.您可以使用该命令查看进程"heirarchy"(即父/子关系)ps axjf.您可以ps手册页(man ps在本地计算机上)中查看有关该命令的更多信息.与此一样kill,该ps命令非常标准,因此文档应该主要适用于所有类似UNIX的操作系统.


Luk*_*ham 6

或者,我发现这个答案为我解决了问题.

杀死名为'postgres'的所有进程

pkill postgres
Run Code Online (Sandbox Code Playgroud)

  • @mLstudent33 - 从您的评论的打印中,您已经运行了命令`ps | grep postgres`。正如您在打印输出中看到的那样,单词“grep”和“postgres”在那里,这是因为您已经返回了刚刚运行的进程。最好使用`ps | pgrep postgres`。tl;博士 - 它确实有效! (2认同)