linux记录pid

metaq的启动脚本是这样实现的:

       nohup $JAVA $BROKER_ARGS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false \
        -Dcom.sun.management.jmxremote.port=$JMX_PORT com.taobao.metamorphosis.ServerStartup $config_files 2>&1 >>$LOG_FILE &
       echo $! > $PID_FILE
       chmod 755 $PID_FILE

一个完整的文件

PID_FILE="bin/job.pid"
LOG_FILE="bin/job.log"
cd $(dirname "$0") || exit 1
cd ..
echo "java -jar lib/metaq-orderevent-shell-1.0.0-SNAPSHOT.jar  -xmode=release"
nohup java -jar lib/metaq-orderevent-shell-1.0.0-SNAPSHOT.jar met_consumer 2>&1 >>$LOG_FILE &
echo $! > $PID_FILE


### Linux 中 `pid` 的含义及用法 #### 一、什么是 `pid` 在 Linux 系统中,`pid` 是 **Process Identifier**(进程标识符)的缩写。它是一个整数值,用来唯一标识系统中的每一个进程[^1]。通过 `pid`,可以方便地管理和操作特定的进程。 #### 二、`pid_t` 类型 为了表示进程 ID,在 C 编程语言中通常会使用一种特殊的数据类型——`pid_t`。该类型的定义位于 `<sys/types.h>` 头文件中。具体实现如下: ```c #ifndef __pid_t_defined typedef __pid_t pid_t; #define __pid_t_defined #endif ``` 这表明 `pid_t` 实际上是对某种底层数据类型的封装,通常是 `int` 或类似的整数类型[^1]。 #### 三、`/var/run/*.pid` 文件的作用 在 `/var/run` 目录下常见的 `.pid` 文件记录了某些服务或守护进程的 `pid` 值。这些文件的主要用途包括: - 提供一种机制来跟踪正在运行的服务及其对应的进程。 - 防止同一服务多次启动(即防止重复实例化)。如果检测到某个 `.pid` 文件已存在,则说明对应的服务已经在运行[^2]。 `.pid` 文件的内容通常只包含一个数字字符串,代表相应服务的当前活动进程号。 #### 四、结构体 `struct pid` 从内核角度来看,Linux 使用更复杂的内部结构来维护和管理 `pid`。以下是简化版的 `struct pid` 定义: ```c struct pid { atomic_t count; // 引用计数器 unsigned int level; // 层级信息 struct hlist_head tasks[PIDTYPE_MAX]; // 进程列表 struct rcu_head rcu; // RCU 数据销毁支持 struct upid numbers[1]; // 用户空间可见的 PID 数组 }; ``` 此结构不仅存储了实际的 `pid` 值,还包含了其他元数据以便更好地控制和协调多个线程共享同一个 `pid` 的情况[^3]。 #### 五、常用命令及相关 API 1. **获取当前 shell 的 PID** ```bash echo $$ ``` 2. **查找指定名称的进程并返回其 PID** ```bash pgrep process_name ``` 3. **杀死指定 PID 对应的进程** ```bash kill -9 <pid> ``` 4. **C/C++ 调用 fork 创建子进程时获得新的 PID** ```c #include <unistd.h> pid_t child_pid = fork(); if (child_pid == 0) { printf("Child Process\n"); } else { printf("Parent Process, Child PID: %d\n", child_pid); } ``` 以上展示了如何利用标准库函数创建新进程以及访问它们各自的 `pid`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值