Linux提供了许多工具来管理系统中的进程。你可以用它们来创建、克隆、甚至销毁进程(create, clone, destroy)。有时你可能需要在Linux中按名称杀死所有进程。在Linux中,有多种方法可以做到这一点。你可以使用pkill、pgrep、pidof和killall中的任何一个函数。在这篇文章中,我们将详细介绍它们。现在的例子都是在Ubuntu中运行的。
1, 使用pkill命令
pkill命令允许你直接按名称杀死进程。例如,以下是杀死所有以apache为名的进程的命令:
$ sudo pkill apache
pkill命令使用格式:
pkill [options] <pattern>
注意这个参数是一个pattern,是一个正则表达式。如果使用apache,那所有名字中包含apache的进程都会被杀掉。
如果命令是:
$ sudo pkill apache$
那就是杀掉所有名字结尾是apache的进程。
需要注意的是这里的进程命不包括选项部分,比如在Ubuntu系统里使用ps命令查看到一个进程:
/usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3
这个进程的名字就是前面的路径加进程名,而后面的长长选项都不是进程的名字。
可以直接使用ps -ef命令查看全部进程,里面包含完整的进程命。比如在当前路径下有个程序test,运行后显示进程名:
$ ./test
$ pwd
/home/ubuntu/Workspace/01_pkill
$ /home/ubuntu/Workspace/01_pkill/test
$ ps -ef | grep test$
vm 2662 1628 99 09:12 pts/0 00:19:37 /home/ubuntu/Workspace/01_pkill/test
vm 3185 1628 99 09:29 pts/0 00:02:43 ./test
2,使用pgrep
pgrep命令根据输入的搜索字符串返回一个PID的列表。所以你也可以使用pgrep命令按其名称搜索所有的命令,并使用kill命令来杀死Linux中的这些进程。
下面的命令将列出所有名字为apache的进程的PIDs:
$ pgrep apache
6123
6230
可以加上kill命令,杀掉搜索名字得到的PID:
$ kill -9 `pgrep apache`
这里的kill -9是强制杀死某个进程。pgrep命令输出所有名字包含apache的进程PID,作为kill命令的输入,可以一次杀死多个进程。
pgrep的用法:
pgrep [options] <pattern>
所以参数也是一个正则表达式,和pkill一样。
3,使用pidof
类似的,使用pidof命令,也可以根据进程名获取PID列表。
$ pidof apache
6123 6230
然后就可以使用kill命令来根据PID杀死进程:
$ kill -9 `pidof apache`
pidof命令的用法:
pidof [options] program [program...]
可以看到可以后面接多个参数,一次返回多个进程名的ID。
pidof和pgrep的区别是后面的参数需要是完全匹配的进程名。要么是和程序名一样,要么是和完整路径名加程序名一样。
4,使用killall
使用killall命令根据名字直接杀死进程:
$ killall -9 apache
这个命令和pidof类似,给出的名字要完全匹配,要么和程序名一样,要么是和完整路径名加程序名一样。
5,其他方法
如果不使用上面这些工具,而杀掉某个进程的原始方法,恐怕是使用ps命令显示出所有进程,按名字找到进程信息所在行的PID,再使用kill命令。
或者使用ps | grep procName,来快速定位进程信息,找出PID,再执行kill命令。这样使用没有上面的方法快。
$ ps | grep test
3450 pts/0 00:00:03 test
$ kill 3450
[1]+ Terminated ./test
总结
按照是模式匹配还是完全匹配名称,将pgrep/pkill和pidof/killall区分开来。
按照取得PID信息和直接执行kill操作,将pkill/killall和pgrep/pidof区分开来。
参考:
How to Kill Process by Name in Linux - Ubiq BI
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>