我如何不显示无法使用“ kill + [pid number]”命令杀死的进程?

时间:2019-06-05 13:33:47

标签: bash shell ps

我在学校从事“在Linux中创建任务管理器”项目。 我使用[1,4]命令从ps命令获取cmd名称 如果使用此命令,则会看到部分结果:

>>> a=[[3,5],[5,3],[5,4],[0,2],[1,4],[1,2]]
>>> a.reverse()
>>> a.remove()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: remove() takes exactly one argument (0 given)
>>> a.remove(5)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: list.remove(x): x not in list

当我尝试使用每个进程的pid终止那些进程时,由于它们的PID不存在,它不会终止它们。

我怎么不显示那些ps -u [username] -o stat,cmd --sort=-pid | awk '{print $2$3$4}'awk{print$2$3$4} ps-u[username]

我想不出任何主意

awk{print$2$3$4}

2 个答案:

答案 0 :(得分:0)

您无法杀死它们,因为它们仅在命令运行时才处于活动状态,这与生成该输出所使用的命令相同。

有几种方法可以抑制这些。我认为最简单的方法是将其过滤到awk脚本中。:

ps -u [username] -o stat,cmd --sort=-pid | awk '$2!="awk" && $2!="ps"{print $2$3$4}'

答案 1 :(得分:0)

JNevill的解决方案排除了每个正在运行的awkps进程。我认为最好排除tty上的进程。另外,您并没有获得有关如何使用awk的完整命令。我(有点)使用sed解决了这个问题。

$ ps -u $USER -o stat,tty,cmd --sort=-pid | grep -v `ps -h -o tty $$` | sed -r  's/.*  (.*)$/\1/'

您可以使用以下命令对其进行测试。我在另一个终端上打开了man ps

$ ps -u $USER -o stat,tty,cmd --sort=-pid | grep -v `ps -h -o tty $$` | grep -E '(ps|grep)'
S+   pts/14   man ps

缺点是,除了排除psgrep外,它还排除了您的应用程序。