pgrep用于与Ubuntu中的终端无关的进程

时间:2016-12-11 09:13:31

标签: shell ubuntu grep tty ps

我想找到与终端无关的进程的所有ID。

当我执行?命令时,我在TTY字段中看到许多具有pgrep字符的进程。

我想获取这些进程ID。有没有办法用getDate做到这一点?

我尝试查看here上的文档,但对我来说不是很清楚。

2 个答案:

答案 0 :(得分:0)

使用find

pgrep --inverse -t \
  "$(find /dev/ -type c -regex '.*tty[0-9]+' -printf '%f ')"

find命令通过command substitution调用。由于命令替换用双引号括起来,因此输出作为单个单词传递给preg

选项:

  • -type c仅选择字符特殊文件(可以使用stat -c '%F' /dev/tty*进行检查);
  • -regex '.*tty[0-9]+'仅选择与正则表达式匹配的文件,即所有内容(.*)后跟一个或多个(+)个数字([0-9]);
  • -printf '%f '打印文件名后跟空格(find默认打印一个尾随换行符)。由于-t选项接受一个TTY名称列表(没有"/dev/"前缀),用逗号或空格分隔,我们可以在文件名(%f)之后放置空格或逗号。< / LI>

使用文件名扩展

cd /dev
ttys=( tty[0-9][0-9]?[0-9]? )
cd - >/dev/null
pgrep -a --inverse -t "${ttys[*]}"

tty[0-9][0-9]?[0-9]?扩展为tty后跟一个,两个或三个数字(?使前面的模式可选)。

ttys=( words )根据IFS构建数组 - 分隔的单词(IFS也称为&#34;输入字段分隔符&#34;)。

"${ttys[*]}"扩展为单个单词,由IFS中的第一个字符分隔的数组项组成(默认为空格)。

答案 1 :(得分:0)

  

我想找到与终端不相关的所有进程ID。

     

是否可以使用pgrep来做到这一点?

否,但是ps及其选项是可以解决的

  • a … this option causes ps to list all processes with a terminal …
  • -N Select all processes except those that fulfill the specified conditions (negates the selection). …
  • o format Specify user-defined format. …

因此,仅获取那些进程ID ,没有标题行:

ps a -N opid=