我如何才能找出哪个服务启动了某个进程,以便我可以禁用该服务?

我如何才能找出哪个服务启动了某个进程,以便我可以禁用该服务?

如何将一个进程链接到一个相关服务然后永久禁用它?

我知道

ps aux | less 

将给我进程名称和端口,但我想获取关联的服务(甚至文件位置),以便我可以在启动时禁用它(如果需要),并找出文件在哪里以及是否需要卸载某些东西。

答案1

在 Ubuntu 16.04 及更高版本(用作systemdinit)上,你可以使用systemctl status <PID> (摘自这篇 Unix & Linux 文章)

对于服务流程:

$ systemctl status 561
● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2017-01-04 15:38:01 JST; 7h ago
 Main PID: 561 (sshd)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/sshd.service
           └─561 /usr/bin/sshd -D

对于其他事情,它可能在用户会话范围内:

$ systemctl status $(pgrep chrome -n)
● session-c2.scope - Session c2 of user muru
   Loaded: loaded (/run/systemd/transient/session-c2.scope; transient; vendor preset: disabled)
Transient: yes
   Active: active (running) since Wed 2017-01-04 15:46:30 JST; 7h ago
    Tasks: 422
   CGroup: /user.slice/user-1000.slice/session-c2.scope

U&L 帖子中的另一个答案有一个更简单的命令:

ps -o unit -p <PID>

比较:

$ ps -o pid,unit -p $(pgrep chrome -n) 561 
  PID UNIT
  320 session-c2.scope
  561 sshd.service

相关内容