2014-05-02 44 views
1

为了庆祝我的3个月试用期作为网站开发者的结论,我将为办公室做一个终端蛋糕。在我对这个主题的研究中,我遇到了这张照片,并想知道这些命令的作用?这个蛋糕上的命令是做什么的?

cake picture

+1

他们应该停止机器上的任何'httpd'(web服务器)进程。但是命令被破坏了。 : - \ –

+2

那么,传递给'kill -9'的值将不仅仅包含进程标识符,除非它们中的一些恰好是有效的PID,否则它只会打印一堆错误消息并终止进程。 (但是在我的系统上,我运行Apache的时候,Web服务器进程被命名为'apache2',而不是'httpd'。) –

+0

谢谢,我的好奇心已经满了!我猜想它可能是这方面的一些东西。 – okeegan

回答

5

这条管道将尝试停止所有Apache进程的系统上,在一个相当沉重增值Rube Goldbergian时尚。

管道:

  1. 获取系统中的所有进程的列表。ps axww

    这种方法是超越,提供了超过实际需要的数据来实现预期的结果,这将在稍后导致问题。

  2. 查找包含httpd的行,这是Apache Web服务器的常用进程名称。它可能意外地与其他东西相匹配,但在一台应该只是一台Web服务器的机器上,它的安全性相当于

    你得到这样的线条勾勒出这一阶段的:

    17652 ?  Ss  0:00 /usr/bin/httpd -blah -args 
    

    该管道将匹配vi /etc/httpd/conf.d/mime.conf命令了。

  3. 过滤掉含有grepgrep -v grep)线,因为第一个grep还会发现本身

    24180 pts/0 R+  0:00 grep httpd 
    

    如果不筛选出这条线,你就有可能杀死第一grep在管道结束之前的实例,从而中断管道。 ps在Linux上的排序输出的PID默认情况下,这样以来PIDs wrap aroundgrep可能实际上没有任何效果可言httpd之前出现,导致蛋糕命令。

  4. 使用xargs上运行发现每行kill -9

    也就是说,它建立这样的命令并运行它们:

    kill -9 17652 ?  Ss  0:00 /usr/bin/httpd -blah -args 
    

    这可能是也可能不是你想要什么。它有时可工作,因为进程ID(PID)是上线的第一件事,当你运行psaxww标志。 (还有其他的方式来运行ps地方就行的第一件事情是别的东西。)蛋糕装饰者希望系统上的kill的实现不会在ps输出行上的PID之后得到所有其他垃圾时被禁止。

    POSIX doesn't saykill(1)什么是非PID参数。它可以停止在第一个非数字参数,它可以给它找到的每个这样的参数给出错误,或者它可以默默地忽略它们。如果ps找到的那一行碰巧包含有效的PID数字,那么该命令可能会终止您不想要的进程。

这将是好了很多,在这里使用pgrep,如果可用:

# pgrep httpd | xargs kill -9 

不仅是命令短,它确实你真正想要的,可靠的。它不匹配,然后筛选出grep进程,它只匹配进程名称,并且不会将非PID垃圾传递到kill

系统的pgrep往往也有命令pkill,它封装了该管道成一个单一的命令:

# pkill httpd 

您可以添加这里如果你要强行终止httpd过程,但我会离开它从这里开始。我已经命令这些命令越来越歧视,所以如果你愿意的话,让它们变得越来越残酷也是有意义的。

如果您的系统没有pgreppkill,它可能有pidof

# kill $(pidof httpd) 

另一种方法是使用killall

# killall httpd 

当心,该killall命令可以做something different在非Linux操作系统上。

然而,最安全的方法是使用你的操作系统正常的“停止web服务器”命令。例子:

# service httpd stop 
# /etc/init.d/httpd stop 
# systemctl stop httpd.service 
# launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist 

阿帕奇包括 “停止Apache很好” 命令:

# apachectl stop 

该命令将只停止Apache的正确,但是。以上操作系统特定的命令也可以执行其他清理操作。如果Apache是​​由操作系统启动的,则应该使用操作系统自己的命令来停止它。

-1

这是一个蛋糕保护命令。此命令unables根吃蛋糕,因为在此之后愤怒的用户,将调用根,打开故障单,等等:)

+0

应该'不能'启用'或'禁用'或其他? –