今天遇到这么一个需求,我希望把正在运行的某个进程结束掉,配置了其他环境后,再重新启动该进程。可是,因为不知道该进程在哪,结束掉就不好再启动。想起查看进程资源这一节,类比了一下方法,发现是可行的。
实例
先编写 demo,用 demo 测试更安全,代码如下:
// 文件名:test.c
#include <stdio.h>
#include "stdint.h"
#include "stdlib.h"
#include <unistd.h>
int main()
{
int i = 0;
while(1){
sleep(10);
printf("test is running...\n");
}
i = 0;
return 0;
}
功能很简单,就是每隔 10 秒在终端打印
test is running...
编译并在后台执行:
$ gcc -o test test.c
$ ./test &
根据进程 pid 获取进程所在路径
首先使用 ps 命令查看该进程 pid:
$ ps -A |grep test
52734 pts/2 00:00:00 test
接着就可以进入进程的资源目录,列出目录文件:
$ cd /proc/52734
$ ls
attr comm fd map_files net pagemap sessionid status
autogroup coredump_filter fdinfo maps ns personality setgroups syscall
auxv cpuset gid_map mem numa_maps projid_map smaps task
cgroup cwd io mountinfo oom_adj root stack timers
clear_refs environ limits mounts oom_score sched stat uid_map
cmdline exe loginuid mountstats oom_score_adj schedstat statm wchan
注意到 exe
,它表示进程的运行,它指向存储在磁盘中的进程文件即路径,只需再执行一次 ls -l
命令即可得到进程路径
$ ls exe -l
lrwxrwxrwx 1 lcc lcc 0 7月 31 20:21 exe -> /lccRoot/xx_workPlace/job/7--preAlloStor/5--embed_fat32/build/test
这样就得到了路径:
/lccRoot/xx_workPlace/job/7--preAlloStor/5--embed_fat32/build/test