我必须使用awk解决练习.基本上我需要从'ps aux'命令检索每个用户的内存使用总量和格式,如下所示:
User Total%Mem
user1 3.4%
user2 1.5%
Run Code Online (Sandbox Code Playgroud)
等等.
我似乎无法解决的问题是:我如何知道有多少用户登录?我怎样才能为每一个做出不同的总和呢?
谢谢 :)
为什么子Popen.pid进程pid()与ps命令返回的值不同?
当我ps从python(with subprocess.call())和另一个终端调用时,我注意到了这一点.
这是一个简单的python文件来测试:
#!/usr/bin/python3
'''
Test subprocess termination
'''
import subprocess
command = 'cat'
#keep pipes so that cat doesn't complain
proc = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
shell=True)
print('pid = %d' % proc.pid)
subprocess.call("ps -A | grep -w %s" % command,
shell=True)
proc.terminate()
proc.wait() # make sure its dead before exiting pytyhon
Run Code Online (Sandbox Code Playgroud)
通常报告的pid比报告的pid ps多1或2 Popen.pid.
如何在Solaris中扩展ps -fe的输出,使其显示超过80个字符?我的进程有几个参数,进程名称无法再显示.
当我简单地运行时"matlab",maxNumCompThreads返回4.
当我运行时"matlab -singleCompThread",maxNumCompThreads返回1.
但是在这两种情况下ps uH p <PID> | wc -l(我从SO上的另一个问题中选择以确定进程正在使用的线程数)返回35.
是什么赋予了?有人可以向我解释35代表什么,以及我是否可以信任maxNumCompThreads表示Matlab只使用一个线程?
所以我正在尝试开发一个脚本来查找特定进程,并杀死运行时间最长的进程。试图按经过时间对命令进行排序正在成为问题。这是我正在运行的命令,我知道有很多 | 并且可能更清楚为什么要这样做,但我对使用awk还很陌生。
ps -eo pid,cmd,stat,etime --sort=etime | grep cassi32 | awk '$3 == "/rESTECH"' | awk '$4 == "S"'
Run Code Online (Sandbox Code Playgroud)
我得到的输出是这个。
5703 cassi32 /rESTECH S 00:40
65504 cassi32 /rESTECH S 1-21:45:39
65520 cassi32 /rESTECH S 03:21:39
65521 cassi32 /rESTECH S 3-15:02:37
65531 cassi32 /rESTECH S 1-21:44:39
Run Code Online (Sandbox Code Playgroud)
如您所见,etime 列似乎没有任何特定顺序,而是按 PID 排序。
关于如何按 etime 进行排序的任何想法。一旦完成,我可以处理杀死部分。
我试图了解我们正在尝试运行的大规模模拟的内存使用情况.当我运行它"ps"报告
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
myuser 5252 97.7 0.5 5751412 377392 ? Rs 19:49 1:15 myprogram
Run Code Online (Sandbox Code Playgroud)
我们在该模拟中有三个阵列,每个阵列占用1.6gb(2亿个双打).根据中的信息
我预计内存将被列在RSS下,但RSS只有377MB.根据stackoverflow线程中的信息,我得出结论,必须换掉内存并查看"free -m"
total used free shared buffers cached
Mem: 64391 5985 58406 0 463 1295
-/+ buffers/cache: 4226 60164
Swap: 4766 0 4766
Run Code Online (Sandbox Code Playgroud)
和交换根本没用!除了它无论如何它太小的事实.那么RSS与VSZ的差异来自哪里呢?为什么我们分配VSZ的一部分而不是RSS的一部分呢?
我感谢所有的帮助
我需要使用ps类型名称的进程来打印UID PID PPID PRI NI VSZ RSS STAT TTY TIME列。
GNU nano 2.0.6
File: file2
ps o uid,pid,ppid,ni,vsz,rss,stat,tty,time | grep $2 > $1
cat $1
echo "enter pid of process to kill:"
read pid
kill -9 $pid
Run Code Online (Sandbox Code Playgroud)
但是,当我将此命令与参数$ 2 = bash一起使用时,它什么也不会打印(此过程存在)
更新
GNU nano 2.0.6
File: file2
ps o uid,pid,ppid,ni,vsz,rss,stat,tty,time,command | grep $2 | awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9}' > $1
cat $1
echo "enter pid of process to kill:"
read pid
kill -9 $pid
Run Code Online (Sandbox Code Playgroud)
这对我有用,但是实际上,恕我直言,此解决方案不是最佳解决方案。我在grep名称之后使用阴影列命令,并打印除命令外的所有列。
我发现ps aux列出了当前正在运行的进程,我发现其他人在提及ps auxwww。我想知道这意味着什么?或它做什么?ps aux和之间有什么区别ps auxwww?
在Linux bash中,这四列是什么意思ps?
例如
PID TTY TIME CMD
15286 pts/498 00:00:00 bash
30887 pts/498 00:00:00 ps
Run Code Online (Sandbox Code Playgroud) 这是我的命令:
top -b -n 1 | head -3 | tail -n 1 | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)
我运行一个bash脚本,它获取这些细节(也包括平均负载和内存消耗)并将其保存到一个文件,我用它来可视化CPU负载.
但是上面的命令,总是显示相同的值!~6%,无论服务器是否处于高负载或空闲状态.
当我跑:
top
Run Code Online (Sandbox Code Playgroud)
它在开始时显示相同的值(~6%),刷新后显示实际值(例如80%).
如何解决这个问题,或者如何获得可用于可视化的当前cpu使用?