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

标签 shell ubuntu grep tty ps

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

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

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

我试着查看 here 上的文档, 但我不是很清楚。

最佳答案

使用查找

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)。

使用文件名扩展

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 中的第一个字符分隔的数组项组成(默认为空格)。

关于shell - pgrep 用于与 Ubuntu 中的终端无关的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41084600/

相关文章:

java - 在 ubuntu 中使用特定 JRE 运行 .jar

linux - 我可以在不重新登录的情况下应用 gsettings 吗?

linux - Live Linux grep 脚本 - 只打印肯定的结果

linux - 检查一个文件中的所有行是否都存在于另一个文件中的某处

linux - 将文件从一台服务器移动到另一台带日期戳的 Linux

bash - 如何解析 mmcli 输出中的调制解调器编号、标识符和名称?

node.js - 无法在 Ubuntu 19.04 中安装 Node.js

django - Django ipython shell 中 %autoreload 的正确配置是什么?

windows - C/C++程序如何将自己置于后台?

json - 在 Bash 中,如何从日志文件中解析多个换行符分隔的 JSON 对象?