- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不知道为什么pidof
不起作用,但是pgrep
作品。
$ pidof squid
returns nothing
$ pgrep squid
returns 3322
如何使用 pidof
获取 3322 ?
最佳答案
pidof
将返回有关实际程序名称的详细信息,而 pgrep
将返回有关与所提供模式匹配的任何进程的详细信息。这在两个工具的手册页中都有明确说明。
pidof [-s] [-c] [-n] [-x] [-m] [-o omitpid[,omitpid..]] [-o omitpid[,omitpid..]..] program [program..]
对比
pgrep [options] pattern
当您查找可执行文件 squid
时,pgrep
可以匹配它,因为该模式与 /usr/bin/squid*
匹配。而 pidof
无法找到名为 squid
的程序,因为 Squid 守护进程的名称可能类似于 /usr/bin/squid-server
。
例如,我在这里查看 ps
的输出,并查找其中以 systemd
名称运行的程序:
$ ps -eaf | grep systemd
root 1 0 0 Sep03 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 425 1 0 Sep03 ? 00:00:03 /usr/lib/systemd/systemd-journald
root 480 1 0 Sep03 ? 00:00:00 /usr/lib/systemd/systemd-udevd
dbus 630 1 0 Sep03 ? 00:00:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 648 1 0 Sep03 ? 00:00:00 /usr/lib/systemd/systemd-logind
pgrep
也能够找到它们:
$ pgrep -l systemd
1 systemd
425 systemd-journal
480 systemd-udevd
648 systemd-logind
但是 pidof
只能找到第一个:
$ pidof systemd
1
这是因为 PID 1 的名称为 /usr/bin/systemd
。
关于linux - pidof 和 pgrep 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52151698/
我想运行 pgrep 来查找某个进程的 ID。它工作得很好,除非作为更大的 bash 命令运行,因为 pgrep 还将匹配它的父 shell/bash 进程,其中包括匹配表达式作为其命令行的一部分。
我在使用 pgrep 和 wc 命令时遇到问题。我发现 2 行我只期望 1 行。 my $test = `pgrep -f 'blabla'`; print $test; <------ pri
我想在 Linux 中使用“pgrep”命令获取两个或多个进程的 PID。 我们知道 pgrep 的语法是 pgrep [options] 这是一个假设的命令,它应该返回名称分别为 process1
我正在尝试使用 pgrep 首先检测一个进程是否正在运行,如果是,则确定该进程是否被意外复制(运行)。如果是这样,它应该终止重复的进程。 if ! pgrep -f "java" > /dev/nul
我有一个 bash 脚本试图用参数调用 pgrep(过度简化): PATTERN="'/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/ligh
我一辈子都弄不明白为什么 pgrep 没有返回我进程的 PID。然后,在最后一次徒劳的尝试中,我只键入了可执行文件名称的一部分,瞧,PID 出现了。这导致了这个实验: bash-4.1$ ./test
我有一个脚本,我只想运行一次。如果脚本第二次被调用,我会检查它是否存在锁定文件。如果锁文件存在,那么我想看看进程是否真的在运行。 我一直在摆弄 pgrep 但没有得到预期的结果: #!/bin/bas
pgrep 使用正则表达式作为模式样式。我错过了 grep 的 -i 选项,告诉 pgrep,我正在搜索不区分大小写。 另一种选择是 ps ax | grep -i PATTERN 但是我必须使用 P
我试图找到一个包含术语“someWord”和另外两个由 $1 和 $2 表示的特定进程 7 regex="someWord.*$1.*$2" 8 echo "$regex" 9 [
我在这里阅读了几篇关于 pgrep“似乎”返回自身的案例的帖子,尽管它永远不应该返回。关键似乎是 bash 和 sh 功能之间的区别。除了在我的例子中,我已经确认 sh 确实是 bash 的链接。 我
我有一个练习要在 Linux 中练习 BASH,但我陷入了困境。它说如下: “列出命令行中包含 BASH 一词的所有进程。将输出重定向到文件。再执行两次此操作,将其添加到文件末尾。然后列出按 PID
如果没有运行,我当前的 cronjob 将启动 beaver: #!/bin/bash pgrep -l -x beaver || /usr/sbin/service beaver start 我想修
我正在尝试查找进程 (motion_sensor.py) 的 PID,但 pgrep 未返回任何内容。为什么不返回进程id? pgrep -u www-data motion_sensor.py ps
如果我执行以下,这只是一个将永远等待的长命令 grep 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
我正在编写一个代码: 将所有 xsessions 名称放在一个文件中。 虽然不是 EOF ,但将一行分配给 a 变量,然后将其逐行传递给 pgrep。 在终端中输出 pgrep。 有几种打印桌面环境、
我正在与kubernetes和minukube一起在我的机器上本地运行集群,但是我遇到了这个错误: W1118 20:54:48.711968 14383 kubeadm.go:502] pgrep
我正在使用: pgrep -P $$ 获取 $$ 的子 pid。但实际上我也想要一份孙辈和曾孙辈的名单。 我该怎么做呢?例如,使用常规编程语言,我们会使用递归来做到这一点,但是使用 bash 呢?也许
当我在 shell 上执行以下命令时,它会返回预期的 PID,例如4676: pgrep -f konakart 但是当在脚本上使用该行时,它会返回两个 ID(预期的一个,我猜另一个来自它本身): #
我需要在linux上的bash中找到某个java进程的pid。 如果只有一个java进程, PID=$(pgrep java) 有效。 对于多个 java 进程,它变得更加复杂。我手动运行 pstre
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我是一名优秀的程序员,十分优秀!