PGREP用于与Ubuntu中终端无关的过程



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

当我执行ps aux | less命令时,我在TTY字段中看到了许多带有?字符的过程。

我想获得这些过程ID。有没有办法使用pgrep

我尝试在这里查看文档,但对我来说并不清楚。

使用find

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

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

选项:

  • -type c仅选择字符特殊文件(可以使用stat -c '%F' /dev/tty*检查);
  • -regex '.*tty[0-9]+'仅选择匹配正则表达式的文件,即所有内容(.*),其次是一个或多个(+)数字([0-9]);
  • -printf '%f '打印文件名,然后是一个空间(find默认情况下打印了尾随的新线)。由于-t选项接受了TTY名称列表(没有"/dev/"前缀),并用逗号或空白分开,因此我们可以在文件名之后放置空间或逗号(%f)。

使用文件名扩展

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也称为"输入字段隔离器")。

"${ttys[*]}"扩展到一个单词,该单词由与IFS分开的数组项组成(默认为Space)。

我想找到与终端无关的过程的所有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. …

so,仅获取这些流程ID ,没有标题线:

ps a -N opid=

相关内容

  • 没有找到相关文章

最新更新