我想找到与终端无关的进程的所有ID。
当我执行?
命令时,我在TTY字段中看到许多具有pgrep
字符的进程。
我想获取这些进程ID。有没有办法用getDate
做到这一点?
我尝试查看here上的文档,但对我来说不是很清楚。
答案 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=