如何用ps过滤掉默认的系统进程?

有没有办法在Linux系统上获得正在运行的进程的列表,而不是在每个系统上运行的默认进程(即只有那些在事实之后安装/执行的进程)。 这可以用ps或者其他类似的工具来完成吗?

谢谢

默认的系统进程可能是指“守护进程”,如httpd,nfsd等。 ps输出中的TTY列是? 对于守护进程。 所以要排除这些,你可能需要在shell / perl中写一个脚本来取决于你所知道的

在这里,我假设tty作为第2列,所以取决于你的输出,你可能想改变它。

Perl的:

 #!/usr/bin/perl use strict; use warnings; open (PS,'ps aux |') or die "command can't execute $!"; # Runs command using pipe while(<PS>){ # Run through pipe line by line my $ttycol=(split) [2]; # get tty column from ps output if($ttycol ne '?'){ # If col is ? then it's a daemon print $_; # if not print } } close(PS); 

然后像“perl script.pl”一样运行它。

贝壳:

从脚本input,在shell脚本中也是如此

ps -ef | awk '$6 != "?" {print}'

我还会假设,就像之前的回答一样,你指的是守护进程作为“默认”,因此他们将在tty上运行。 在这种情况下,以下应该工作,但不幸的是,我不能在这里工作的testing。

 ps aux | grep "[:space;]+?[:space:]+" 

ps aux以标准BSD格式为您提供系统中的所有进程,通过pipe道传输到grep -v ,它将匹配所有不包含正则expression式string( [:space;]+?[:space:]+ )的行。 正则expression式查找任意数量的空格,然后单个“?” 其次是任何数量的空间。 (从理论上来说,除了tty这样的列以外,应该没有任何内容符合这个描述)。

快速,肮脏,从一个相对新人,但你有它。