使用这些 ps 选项,我剪切了 10 行并按 CPU 使用率 (pcpu) 对 ps 的输出进行排序:
ps -eo pcpu,etime,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 10
Run Code Online (Sandbox Code Playgroud)
我还需要显示列的名称(就像不切割输出的相同命令)。
%CPU ELAPSED PID USER COMMAND
0.0 10-23:41:11 1 root init [2]
0.0 10-23:41:11 2 root [kthreadd]
Run Code Online (Sandbox Code Playgroud) 我一遍又一遍地运行这两个命令:
$ ps aux | grep php | grep -v grep
www-data 3663 100 14.8 328620 304900 ? R 12:56 0:54 php /home/jason/projects/mcif/./symfony import:process --id=91
jason@gob:~/projects/mcif$ sudo kill 3663
Run Code Online (Sandbox Code Playgroud)
有没有一种快速简便的方法来获取pid并杀死它?我最接近的是这个:
$ ps aux | grep php | egrep -o ' [0-9]+ ' | head -n1
3836
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过kill.
我正在使用 Ubuntu 服务器,当我运行时,ps aux我得到以下进程表http://pastebin.com/NJsASBek,因为我们可以看到 apache 进程显示如下:
www-data 26487 0.0 0.9 245476 14920 ? SL 17:32 0:00 /usr/sbin/apache2 -k 开始
其中 2687 是 PID。我怎么知道我启用的网站属于那个过程?
这就是我的 apache 站点的定义方式http://pastebin.com/mcew79sH当然,如果需要,我愿意编辑我的 apache 站点。
我写了一个 Nagios 检查,它计算有多少 pgpool 进程正在运行以及每个进程运行了多长时间。我在 Linux CentOS 6.4 上运行
为了获得进程运行的时间,我使用了下一个命令:
ps -p PID -o etime=
Run Code Online (Sandbox Code Playgroud)
例子:
[root@pgpool ~]# ps -p 28737 -o etime=
08:35:48
[root@pgpool ~]#
Run Code Online (Sandbox Code Playgroud)
这是正常输出,但有时我会得到以下输出并破坏脚本:
7-17:15:52
示例:
[root@pgpool ~]# for prc in $(ps -ef | grep pgpool | grep -v wait | grep -v PCP | awk '{print $2}'); do ps -p $prc -o etime= ; done
40:55
22:08:43
23:55
15:12:36
20:35
7-17:15:52
09:34:35
29-00:56:18
[root@pgpool ~]#
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
我有一个 LAMP 服务器,它使用 ubuntu 9.10、apache2、mysql5 和 php5。
当我通过 shell 以 root 身份登录时,我运行了一个“ps aux”命令并看到如下内容
www-data 3151 0.1 4.3 220024 31032 ? S 12:22 0:00 /usr/sbin/apache2 -k start
www-data 3153 0.2 3.6 214776 26020 ? S 12:22 0:01 /usr/sbin/apache2 -k start
www-data 3162 0.3 5.1 225060 36920 ? S 12:26 0:01 /usr/sbin/apache2 -k start
www-data 3163 0.1 4.1 218872 29664 ? S 12:26 0:00 /usr/sbin/apache2 -k start
Run Code Online (Sandbox Code Playgroud)
为什么我看到 www-data 的多行?每行是否代表我网站上的实际用户?
我有时会遇到内存问题,所以我试图确定这些 www-data 统计信息是否相关。
当我运行时,ps aux我得到以下进程表http://pastebin.com/NJsASBek,它显示了每个子进程使用了多少内存。我们可以看到apache进程如下所示:
www-data 26487 0.0 0.9 245476 14920 ? Sl 17:32 0:00 /usr/sbin/apache2 -k start
Run Code Online (Sandbox Code Playgroud)
其中 2687 是 PID,但我不知道它是否属于 foo1.domain.com 或 foo2.domain.com 或 fooX.domain.com 等...
我怎么知道那些 PID 显示的站点(例如 ServerName)是哪个?
这就是我的 apache 站点的定义方式http://pastebin.com/mcew79sH当然,如果需要,我愿意编辑我的 apache 站点。
我有一个在 AWS 上运行的 ubuntu linux ec2 实例。输入命令ps -ef查看所有当前正在运行的处理后,我看到
root 2346 944 0 06:08 ? 00:00:00 CRON
ubuntu 2347 2346 0 06:08 ? 00:00:00 /bin/sh -c /usr/bin/php /var/www/html/chat/update.php
ubuntu 2348 2347 0 06:08 ? 00:00:00 /usr/bin/php /var/www/html/chat/update.php
Run Code Online (Sandbox Code Playgroud)
我的 crontab 如下所示
*/2 * * * * /usr/bin/php /var/www/html/chat/update.php
Run Code Online (Sandbox Code Playgroud)
根据我使用 cron 作业的经验,在查看所有当前正在运行的进程时,我从未见过前两个进程运行过。前两个进程究竟在做什么,我该如何摆脱它们?
问题很基本,如何ps在 Linux 中获取带头的输出。
Linux 详细信息:
PRETTY_NAME="Debian GNU/Linux 7 (wheezy)"
NAME="Debian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
Run Code Online (Sandbox Code Playgroud)
我可以用 来获取它ps -ef | { head -1; grep query; },但文字很多。在查看psusing的文档时man ps,我可以看到有一个选项--headers,但使用它也不会给出标题:
>~$ ps aux --headers | grep grep
user 24082 0.0 0.0 6656 628 pts/0 S+ 12:59 0:00 grep grep
Run Code Online (Sandbox Code Playgroud)
还尝试h使用命令选项:
~$ ps auxh | grep grep
user 25982 0.0 0.0 6656 624 pts/0 S+ 13:14 0:00 grep grep
Run Code Online (Sandbox Code Playgroud)