服务的进程在哪里?

服务的进程在哪里?

在 UBUNTU,service postgresql status列出

  Process: 18534 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 18534 (code=exited, status=0/SUCCESS)

但当我测试时sudo ps -ax | grep 18534没有列出任何内容。


笔记

EDIT1 针对@DanielB 请求,但我需要一个简单的命令来显示任何 服务PID。

这里有一个垃圾场more /lib/systemd/system/postgresql.service

# systemd service for managing all PostgreSQL clusters on the system. This
# service is actually a systemd target, but we are using a service since
# targets cannot be reloaded.

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
RemainAfterExit=on

[Install]
WantedBy=multi-user.target

编辑2

上面的 PostgreSQL 是我的本地主机服务器...现在我正在使用 UBUNTU 16 LTS 和 Postgresql 9.X 在“全新、干净、闪亮”的 DigitalOcean Droplet 进行测试...

root@myServer:~# service postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Dom 2016-12-18 17:47:09 UTC; 2 weeks 4 days ago
 Main PID: 8703 (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
      CPU: 0
   CGroup: /system.slice/postgresql.service

Dez 18 17:47:09 myServer systemd[1]: Starting PostgreSQL RDBMS...
Dez 18 17:47:09 myServer systemd[1]: Started PostgreSQL RDBMS.
Dez 18 17:47:14 myServer systemd[1]: Started PostgreSQL RDBMS.


root@myServer:~# sudo ps -ax | grep  8703
 3702 pts/0    S+     0:00 grep --color=auto 8703

root@myServer:~# sudo service postgresql restart

root@myServer:~# sudo ps -ax | grep  8703
 3760 pts/0    S+     0:00 grep --color=auto 8703


root@myServer:~# service postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sex 2017-01-06 16:06:07 UTC; 8s ago
  Process: 3755 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 3755 (code=exited, status=0/SUCCESS)

Jan 06 16:06:07 myServer systemd[1]: Starting PostgreSQL RDBMS...
Jan 06 16:06:07 myServer systemd[1]: Started PostgreSQL RDBMS.


sudo ps -ax | grep  3755
 3780 pts/0    S+     0:00 grep --color=auto 3755

答案1

没有,因为正如您从单元内容中看到的那样,postgresql.service它实际上并没有启动任何守护进程。它仅作为“父”服务存在,用于将各种实例组合在一起[email protected](即一次重新加载所有实例)。请看一下:

systemctl status postgresql@\*.service

答案2

这里的任何地方似乎都没有显示该服务的 PID:

  Process: 18534 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 18534 (code=exited, status=0/SUCCESS)

我之所以这么说,是因为这条消息谈到了退出代码,而这对于正在运行的进程来说毫无意义。只有终止的进程才有退出代码。

如果 postgres 服务正在运行,在 GNU/Linux 系统中,您可以在输出中找到其 PID sudo netstat -ntlp | grep posgres,例如:

tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3738/postgres

在这种输出中,3738 是 PID。

附注:要通过 PID 验证进程,ps -ax | grep the-pid最好执行而不是 运行ps -p the-pid

相关内容