我有一个在Linux 2.6.13和WindRiver Linux 3.0上运行的应用程序.在Linux 2.6.13当我做...
ps -eaf | grep myapplication
Run Code Online (Sandbox Code Playgroud)
...输出显示'myapplication'的多个条目.
如果我在WindRiver Linux 3.0中提供相同的命令,输出只显示'myapplication'的一个条目
差异与操作系统的差异有关吗?请告诉我原因?
我发现我的 java web 服务器(tomcat)使用了高 cpu,所以我使用 'ps aux' 来查看进程信息,例如:
# ps aux | grep -E "PID|java"
USER PID %CPU %MEM
root 7533 143 39.8
Run Code Online (Sandbox Code Playgroud)
它表明java占用了143%的cpu。然后我用'top'命令查看,java进程的cpu使用率也是140%左右。
之后,我将 Web 服务器脱机(无法访问,错误进程仍然存在)。然后我用top看看,java用的cpu很低:
# top | grep -E "PID|java"
PID %CPU %MEM TIME+ COMMAND
7533 0.7 39.9 455:13.81 java
PID %CPU %MEM TIME+ COMMAND
Run Code Online (Sandbox Code Playgroud)
'vmstat' 还显示 cpu 几乎空闲:
# vmstat 1
-----cpu------
us sy id wa st
19 1 79 1 0
0 0 99 1 0
0 0 100 0 0
0 0 100 0 …Run Code Online (Sandbox Code Playgroud) 我有一个名为test.sh的shell脚本:
#!/bin/bash
echo "start"
ps xc | grep test.sh | grep -v grep | wc -l
vartest=`ps xc | grep test.sh | grep -v grep | wc -l `
echo $vartest
echo "end"
Run Code Online (Sandbox Code Playgroud)
输出结果是:
start
1
2
end
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,为什么有两个test.sh进程在我使用``调用ps时运行(与$()相同)而不是直接调用ps时?我怎样才能得到理想的结果(1)?
我正在编写一个脚本(show_volume.sh),可以在短时间内多次调用.我需要一种方法来确定是否只有一个运行此脚本的实例.我想我可以使用ps,所以我在Bash中编写了这个函数:
is_only_process(){
PCOUNT=`ps -a | grep show_volume.sh | wc -l`
echo $PCOUNT
if (( PCOUNT==1 )); then
return 1
fi
return 0
}
Run Code Online (Sandbox Code Playgroud)
所以我添加了这两行
is_only_process
sleep 4
Run Code Online (Sandbox Code Playgroud)
并启动了这个脚本一次,但输出echo $PCOUNT对我没有任何意义.我总是按预期得到值2而不是1.当我运行此命令
ps -a | grep show_volume.sh | wc -l
在脚本运行时从另一个终端,我收到值1.当我连续多次运行此脚本时,几乎相同,例如使用for循环运行10次.当我在使用另一个终端时收到正确的值时,脚本本身会确定太高的值.
现在,为什么这个脚本会确定这些奇怪的值?
当我运行此命令时:
ps aux|awk {'print $1,$2,$3,$11'}
Run Code Online (Sandbox Code Playgroud)
我得到了用户列表,PID,CPU%和实际命令.我想将所有这些列表都输入到shell脚本中以计算CPU%,如果大于5,那么通过PID来终止进程.
我尝试将它管道化为一个简单的shell脚本,即
ps aux|awk {'print $1,$2,$3,$11'} | ./myscript
Run Code Online (Sandbox Code Playgroud)
我脚本的内容是:
#!/bin/bash
# testing using positional parameters
echo "$1 $2 $3 $4"
Run Code Online (Sandbox Code Playgroud)
但我得到一个空白输出.知道怎么做吗?
非常感谢!
Linux服务器是这样的:
Linux hostname 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
并且ps aux显示的 CPU 使用率不正确,并且该值不合理。该值不会像 那样频繁更新top。
例如,对于同一进程,ps 显示 cpu 使用率为 210.0,而 keep 显示多次执行中的该值。但在另一个终端中,顶部显示杯子使用量在 1xx 到 2xx 之间不断变化。顶部的价值是合理的。知道为什么 ps aux 效果不好吗?
如果我在 Linux 中执行命令:
ps -u UserName
Run Code Online (Sandbox Code Playgroud)
然后我得到以下格式的事物列表:
PID TTY TIME CMD
Run Code Online (Sandbox Code Playgroud)
如何让输出仅显示 CMD(文件名)?
如果我执行以下命令,这只是一个将永远等待的长命令
grep 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abcd'
Run Code Online (Sandbox Code Playgroud)
然后pgrep -f找不到进程,如果我搜索abcd哪个包含在long命令的最后一段中.
ps auxww|grep abcd找到进程,但我不能在脚本中使用它,因为它也会查找grep进程self.
如果您只删除一个a则pgrep -f abcd可以看到该进程,但我有一个论点很长的命令,让我遇到了这个pgrep限制.
题
基于唯一字符串检查此类过程的正确方法是什么abcd?
大家好,
我有一些使用 crontab 运行的脚本,并且通过日志文件我知道它们实际上正在运行。问题是,每次我输入 ps -ef | grep .sh(因为我的脚本是 .sh 文件)时,我都没有结果。
我读到 crontab 正在使用自己的环境来执行他的脚本,所以我想知道 ps 命令是否能够检测到它们。
我是 Linux 环境的新手,所以如果我的问题看起来很明显,我很抱歉。谢谢
假设有3个进程名称abc,abcd和abcde.
我正在使用以下命令来查找进程ID:
ps -ef | grep abc | grep -v grep
Run Code Online (Sandbox Code Playgroud)
这给出了所有3个进程的输出及其对应的pid:
user 6009 1 0 May 11 ? 0:23 ./abc
user 28047 1 0 Apr 24 ? 0:04 ./abcd
user 28548 1 0 Apr 27 ? 0:04 ./abcde
Run Code Online (Sandbox Code Playgroud)
现在我想的是,输出的只是过程ID的grep的事情abc,而不返回abcd和abcde.我知道使用grep -v "processname"消除了我想要的但是有什么简单和具体的吗?