如何在使用 ps 命令时排除某些进程

如何在使用 ps 命令时排除某些进程

我尝试使用 python3 开发任务管理器供个人使用。在我的代码中,我使用此命令在 while 循环中列出所有正在运行的进程

ps -eo pid,comm,user,%mem,%cpu | awk '{$4=<Variablehere>*$4/100;}{print;}'

但每次执行时,有三个进程我不希望它们被列出,它们是sh ps awk

所以我的问题是,我怎样才能获得这些进程的 PID,以便以后可以将它们从列表中删除

谢谢

[编辑]

导入子流程
从时间导入睡眠

类过程数据: 定义 在里面(自己) : mem = next(self._run_command("m")).decode('utf-8').replace("\n","") mem = str(int(浮点数(mem)/1024)) #打印(内存)

self.allprocess = "ps -eo pid,comm,user,%mem,%cpu | awk '{$4="+mem+"*$4/100;}{print;}';" self.ownprocess = "ps -eo pid,comm,user,%mem,%cpu | awk '{$4=(" + mem + "*$4/100);}{print;}' | grep $USER" self.otherprocess = "ps -eo pid,comm,user,%mem,%cpu | awk '{$4=(" + mem + "*$4/100);}{print;}' | grep -v $USER" def _run_command(self,fil): if fil == "a" : command = self.allprocess elif fil == "u" : command = self.ownprocess elif fil == "o" : command = self.otherprocess elif fil == "m" : command = "awk '/MemTotal/ {print $2}' /proc/meminfo" p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) for line in iter(p.stdout.readline, b''): if line: yield line while p.poll() is None: sleep(.1) err = p.stderr.read() if p.returncode != 0: print("Error: " + str(err)) @staticmethod def unique(list1 , list2) : ids = [i[0] for i in list2] return [i for i in list1 if i[0] not in ids]; def get(self,choice) : processes = []; for process in self._run_command(choice) : processes.append(process.decode('utf-8').replace("\n","").split()); return processes#[0:(len(processes)-1)-2]; print(processData().get("a"));

我想要的是不列出由于我的程序运行而正在运行的任何进程

答案1

只需插入条件$2 !~ /^(awk|sh|ps)$/

ps -eo pid,comm,user,%mem,%cpu | awk '$2 !~ /^(awk|sh|ps)$/ {$4=<Variablehere>*$4/100;}{print;}'

这意味着“如果 $2 不匹配字符串开头,然后是awksh,或者ps,然后是字符串结尾“ 然后 ...

相关内容