systemctl 取得 service pid

这篇博客介绍了如何使用systemctl命令来检查服务的状态,包括加载情况、活跃状态和PID。通过`systemctl status service_name`可以查看服务详细信息,而`systemctl show --property MainPID --value service_name`则能直接获取服务的PID。进一步,可以使用`ps -f -p PID`来查看对应PID的进程详情。

一般來說,查看service狀態會執行命令

systemctl status rfidgw

 

然後就會看到該service狀態

 

● rfidgw.service - rfidgw service description
   Loaded: loaded (/lib/systemd/system/rfidgw.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-05-24 15:12:17 CST; 1min 51s ago
  Process: 6823 ExecStartPre=/usr/bin/touch /var/log/heartgw.log (code=exited, status=0/SUCCESS)
 Main PID: 6824 (rfidgw_spi1)
    Tasks: 7 (limit: 2062)
   CGroup: /system.slice/rfidgw.service
           └─6824 /home gw rfidgw rfidgw_spi1

May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.079: DMGW_UUID:1d0c0fcc-f805-4e67-92d7-a72e2b7ca724
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.112: Repy_Handler:: 21081
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.112: SOC_SERIAL:000000004B1B363F
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.113: HOSTNAME:DMGW-43A
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.113: ==[ RFIDGW_RESTART_REASON:null ]==
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.152: RFID_A7127_ProcTH
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.180: --------------------------------------------------------------
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.180: [[]]===Use Socket Client to get RFID Tag====]]
May 24 15:12:19 DMGW-43A rfidgw_spi1[6824]: 15:12:19.181: [[]]===Use Socket Client to get RFID Tag====]]


上述結果中的`Main PID`則是Service執行PID,我們用參數的方式直接取得`Main PID`屬性的值

systemctl show --property MainPID --value rfidgw

執行後會返回該屬性的值

6824

以上就是取得該service的PID,利用`ps`指定返查

ps -f --pid 6824

會得到結果如下

UID        PID  PPID  C STIME TTY          TIME CMD
root      6824     1 18 15:12 ?        00:00:09 /home gw rfidgw rfidgw_spi1

 

<think>好的,我现在需要回答用户关于systemctlservice命令的功能对比及使用场景的问题。用户之前询问了如何查看Linux系统的网卡信息,现在转向了系统服务管理相关的命令,这可能是他在实际使用中遇到了需要管理系统服务的情况。 首先,我需要回忆并整理systemctlservice命令的基本知识。根据用户提供的引用内容,systemctl是systemd的一部分,用于管理systemd单元,包括服务、挂载点、设备等。而service命令则是传统的System V init系统的一部分,用于启动、停止和查看服务状态。用户引用的资料也提到,systemctl更现代,功能更全面,而service在某些旧系统中仍然使用。 接下来,我需要比较这两个命令的功能。根据引用[4]和[5],systemctlservice都可以管理服务,但systemctl提供了更详细的控制,比如依赖管理、日志查询、开机自启设置等。而service命令通常只是一个脚本的包装,调用/etc/init.d/中的脚本,功能较为有限。 然后,使用场景方面。用户可能需要知道什么时候用哪个命令。根据引用[3]和[5],现代Linux发行版如CentOS 7+、Ubuntu 16.04+默认使用systemd,因此推荐使用systemctl。而旧系统或需要兼容System V脚本时,可能还需要使用service命令,尽管它可能被映射到systemctl的兼容层。 此外,需要解释两者的区别,比如systemctl可以查看服务状态、启用服务开机启动,而service命令通常不支持这些高级功能。同时,根据引用[2],systemctl在服务管理方面更强大,如重启、重载配置等操作更灵活。 还要考虑用户可能的实际需求。例如,用户之前的问题涉及网卡信息,可能接下来需要配置网络服务,这时候使用systemctl来管理NetworkManager服务会更合适。因此,在回答中需要给出具体的命令示例,帮助用户理解如何应用这些命令。 最后,要确保回答结构清晰,分点对比功能和区别,并提供使用场景的建议。同时,根据用户提供的引用资料,正确标注引用来源,如[^3]、[^4]等,确保信息的准确性和可信度。 总结起来,回答需要涵盖: 1. systemctlservice的基本功能 2. 两者的主要区别 3. 使用场景建议 4. 具体命令示例 5. 引用来源的正确标注 需要避免技术错误,比如混淆systemd和System V的特性,确保每个功能点的描述准确。同时,语言要简洁明了,适合不同层次的用户理解。</think>### `systemctl` 与 `service` 命令功能对比及使用场景 --- #### **一、核心功能对比** | **功能** | **systemctl** (systemd) [^3] | **service** (System V Init) [^5] | |-------------------------|------------------------------|----------------------------------| | **服务启动** | `systemctl start <服务名>` | `service <服务名> start` | | **服务停止** | `systemctl stop <服务名>` | `service <服务名> stop` | | **服务重启** | `systemctl restart <服务名>` | `service <服务名> restart` | | **服务状态查看** | `systemctl status <服务名>` | `service <服务名> status` | | **开机自启设置** | `systemctl enable <服务名>` | 需手动配置脚本(如 `chkconfig`) | | **依赖关系管理** | 自动解析服务依赖[^3] | 依赖顺序需手动配置 | | **日志查看** | `journalctl -u <服务名>` | 需查看 `/var/log/` 文件 | | **服务重载配置** | `systemctl reload <服务名>` | 部分服务支持 `reload` 命令 | | **单元文件管理** | 支持自定义 `.service` 文件 | 仅管理 `/etc/init.d/` 脚本 | --- #### **二、核心区别解析** 1. **架构基础** - `systemctl` 是 **systemd 初始化系统**的核心工具,管理单元(Unit)包括服务、套接字、挂载点等[^3] - `service` 是 **System V Init 系统**的兼容性命令,仅操作 `/etc/init.d/` 中的脚本[^5] 2. **服务状态监控** - `systemctl status` 提供 **动态实时状态**(如进程树、内存占用) - `service status` 仅显示简单启停状态(通过检查 PID 文件) 3. **开机自启管理** - `systemctl enable` 直接修改 systemd 单元链接[^1] - `service` 需配合 `chkconfig` 或 `update-rc.d` 设置运行级别 4. **日志整合** - `systemctl` 通过 `journald` 集中管理日志,支持按服务过滤 - `service` 日志分散在 `/var/log/` 下的多个文件 --- #### **三、使用场景建议** | **场景** | **推荐命令** | **原因** | |---------------------------|--------------------|--------------------------------------------------------------------------| | 现代 Linux 系统(CentOS 7+/Ubuntu 16.04+) | `systemctl` | 系统默认使用 systemd,支持更细粒度的控制[^3] | | 旧版系统(CentOS 6 及以下) | `service` | 兼容 System V Init 脚本 | | 调试服务依赖关系 | `systemctl list-dependencies <服务名>` | 可视化显示服务依赖树 | | 查看实时日志 | `journalctl -f -u <服务名>` | 动态跟踪特定服务的日志输出 | | 临时启停服务 | `service` | 简单操作时更快捷(实际调用 systemd 兼容层)[^4] | --- #### **四、操作示例** 1. **设置 Nginx 开机自启并立即启动** ```bash sudo systemctl enable nginx --now # 同时启用和启动服务 ``` 2. **查看服务的完整依赖关系** ```bash systemctl list-dependencies nginx # 显示服务依赖树 ``` 3. **通过 service 命令重启 SSH 服务** ```bash service ssh restart # 实际调用 /etc/init.d/ssh 脚本[^4] ``` 4. **对比服务状态输出** ```bash # systemctl 输出(包含进程ID、内存占用等) ● nginx.service - The nginx HTTP server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled) Active: active (running) since Tue 2023-10-10 09:00:00 UTC; 2h ago Process: 1234 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Memory: 5.2M # service 输出(仅基础状态) nginx (pid 1234) is running... ``` --- #### **五、演进关系说明** - **兼容性**:在 systemd 系统中,`service` 命令会通过 **systemd-sysvinit 兼容层** 转换为 `systemctl` 调用 - **配置文件差异**: - systemd 服务文件:`/usr/lib/systemd/system/nginx.service` [^1] - System V 脚本:`/etc/init.d/nginx` --- ### **相关问题** 1. 如何通过 systemd 限制某个服务的内存使用量? 2. 为什么在某些系统中 `service` 和 `systemctl` 可以混用?[^4] 3. 如何将传统的 System V 脚本转换为 systemd 单元文件?[^1] 4. systemd 的 `journalctl` 日志与传统 syslog 如何共存?[^3] --- ### **引用标注** [^1]: Linux 中 systemctl 命令及 .service 文件参数解析 [^3]: Systemd 和 Systemctl 命令详解 [^4]: systemctlservice 命令的区别和联系 [^5]: servicesystemctl 的初始化系统差异
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值