问题描述
我如何终止由我自己的non-root帐户运行的所有进程?
我有一些由我的Windows机器引起的spin smbd进程,所以我远程登录到了linux服务器,并且我想杀死那些旋转进程。我无权重新启动服务或重新启动机器。
最佳解决方案
要杀死所有您有权杀死的进程,只需运行该命令即可
kill -15 -1
或kill -9 -1
,具体取决于所需的行为(详情请使用man kill
)
要杀死一个特定的进程,比如说firefox,只需运行
pkill firefox
或killall firefox
,具体取决于您想要的行为:‘killall’和’pkill’有什么区别?
如果您想查看正在运行的进程,请使用该命令
ps -ef
如果你想查看用户bob的所有进程,这可能会有所帮助
pgrep -l -u bob
要么
ps -ef | grep bob
次佳解决方案
使用sudo kill <pid>
或sudo killall <process-name>
第三种解决方案
让我们尝试更多:
sudo apt-get install htop
top
命令是查看系统资源使用情况并查看占用系统资源最多的进程的传统方式。顶部显示进程列表,其中顶部使用最多的CPU。
htop
显示与easier-to-understand布局相同的信息。它还允许您使用箭头键选择进程并使用F
键执行操作,例如杀死它们或更改它们的优先级。
第四种方案
您可以使用
ps -ax | grep application name
如果在ps -ax | grep firefox
这样的终端上搜索firefox类型,则会显示相应应用程序的进程ID。如果进程ID = 1317,则可以通过kill
命令停止该应用程序,
kill -9 1317
第五种方案
我会使用xkill
。在终端中输入xkill
并点击窗口,或输入xkill
和进程ID,它将被终止。
在x.org.上找到更多关于xkill
的信息
第六种方案
要尝试终止用户username
拥有的所有进程,请运行:
pkill -U username
第七种方案
我会把你的问题分成两部分:
1)我如何找到由我开始的流程?运行这个:
ps -u `whoami`
whoami
只是在您不知道您使用的帐户名称的情况下,否则只需输入没有反引号的帐户名称即可。
这将列出您的帐户可以删除的所有进程。
2)ps
命令将列出进程号,TTY,时间和CMD。进程ID是第一列。使用该数字来杀死进程。杀死这个过程时要小心。如果你杀了错误的过程,你可能会破坏某些东西。要杀死进程,您将使用kill
命令,该命令将SIGNAL发送到进程。信号表明过程应该做什么。例如,向进程发送-1
将要求它重新加载配置文件;发送-2
相当于在该过程中按下Control + C; -9
将导致内核放弃进程,而不将其传送给进程。
假设ps -u whoami
返回类似的东西
PID TTY TIME CMD
4333 pts/1 00:00:00 fish
4335 ? 00:00:00 fishd
4816 ? 00:00:00 intellij
4868 ? 00:50:42 java
4939 ? 00:00:19 fsnotifier64
7667 ? 02:49:08 firefox
7698 ? 00:00:00 unity-webapps-s
并且您想通过其进程ID杀死firefox
进程,那么您应该这样做:
kill -1 7667
然后,你会re-run相同的ps
命令,并检查过程是否仍在运行。如果它仍然在运行,那么做一个
kill -2 7667
按照-9
的规定行事。
要终止您的帐户启动的所有进程,请输入kill <level> -1
。和以前一样:按照-9
的方式工作。
如果你知道进程的名称,你可以简单地去killall <processname>
,这是你想要杀死的。例如:killall fish
(鱼,从这个意义上讲,就是Friendly Interactive SHell)。
killall
的文档可以在这里找到:http://manpages.ubuntu.com/manpages/hardy/man1/killall.1.html
第八种方案
… Linux中的所有进程都会响应信号。信号是告诉程序终止或修改其行为的os-level方式。
如何通过PID发送进程信号
将信号传递给程序的最常用方式是使用kill命令。
正如您所预料的那样,此实用程序的默认功能是尝试杀死一个进程:
kill PID_of_target_process
这将TERM信号发送给进程。 TERM信号告诉过程请终止。这允许程序执行clean-up操作并顺利退出。
如果程序行为异常,并且在给定TERM信号时没有退出,我们可以通过传递KILL信号来升级信号:
kill -KILL PID_of_target_process
这是一个不发送给程序的特殊信号。
相反,它被赋予操作系统内核,从而关闭进程。这用于绕过忽略发送给它们的信号的程序…
参考资料