小编cod*_*rus的帖子

使用 'ps' 的 init 进程名称输出不一致

我使用的是 Ubuntu 16.04,并且一直在关注 Linux Bible(第 9 版)的“启动和停止”服务章节。我试图找到我拥有(initsystemd)什么类型的 init 守护进程,这要求我找到哪个进程的 PID 为 1。但是,根据我运行命令的方式,我得到了 2 个不同的结果......

webmaster@my-site:~$ ps -p1
  PID TTY          TIME CMD
    1 ?        00:00:29 systemd
webmaster@my-site:~$ ps -F -p1
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root         1     0  0  9420  5336   0 Feb23 ?        00:00:29 /sbin/init
Run Code Online (Sandbox Code Playgroud)

systemd在运行第一个命令后表示PID1,但/sbin/init在运行第二个命令后表示 PID1。

init ps systemd 16.04

5
推荐指数
2
解决办法
466
查看次数

命令(即 grep)如何知道它何时作为 glob 扩展的一部分运行?

根据我的理解,一个 glob 通配符由 shell 解释,然后为每个匹配的文件名运行给定的命令。假设我有文件:abc1, abc2, and abc3在我的当前目录中。然后,例如,echo abc*将为每个以 'abc' 开头的文件名回显一次。

但是,如果我运行grep 'foo' abc*,我想这应该运行:

grep 'foo' abc1
grep 'foo' abc2
grep 'foo' abc3
Run Code Online (Sandbox Code Playgroud)

这意味着我应该得到以下输出(假设所有文件都包含一行显示“foo”):

foo
foo
foo
Run Code Online (Sandbox Code Playgroud)

然而,我得到:

abc1:foo
abc2:foo
abc3:foo
Run Code Online (Sandbox Code Playgroud)

所以我认为对此有两种可能的解释。首先,grep 以某种方式可以检测到它是否与 glob 表达式一起使用,并通过在匹配之前输出文件名来响应。其次,由于您可以将多个文件传递给 grep,shell 实际上只运行 1 个命令:

grep 'foo' abc1 abc2 abc3

但是,这只有效,因为 grep 最后接受多个文件。另一个命令可能只允许传入 1 个文件。因此,如果您想为与 glob 匹配的多个文件运行该命令,则如果通过上述第二种方法进行 globbing 工作,它将无法工作。

无论如何,有人可以对此有所了解吗?

谢谢!

command-line bash wildcards

4
推荐指数
1
解决办法
373
查看次数

标签 统计

16.04 ×1

bash ×1

command-line ×1

init ×1

ps ×1

systemd ×1

wildcards ×1