Top*_*ndr 2 c c++ unix linux shell
在Linux平台上,如果我在控制台中编写,ps -p "pid" -o command我会在运行程序时获得所有在终端中传递的参数.控制台输出如下:COMMAND gedit /home/sasha/Work/unloker/main.cpp (Ubuntu).现在我正在编写程序,主要目的是获得完整的输入命令行.我的C++代码是:
snprintf(path_cmdline, sizeof(path_cmdline), "/proc/%d/cmdline", pid);
fd_cmdline = open(path_cmdline, O_RDONLY);
if (fd_cmdline < 0) {
} else {
char process_name[PATH_MAX];
if (read(fd_cmdline, process_name, PATH_MAX) < 0) {
} else {
pid_info pid_t;
pid_t.pid=pid;
strcpy(pid_t.command_line,process_name);
strcpy(pid_t.process_name,basename(process_name));
std::cout << pid_t << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
和我的程序输出这样的东西:10753 gedit gedit但是我怎么能得到完整的命令行,当输出ps -p "pid" -o command?
在/proc/%d/运行程序的保持完整命令行中的哪个位置?在Solaris系统中,我知道存在命令pargs,它做我想要的,可能是现在我怎么可能找到这个命令的来源?
/ proc/pid/cmdline中的参数是一个字符串列表,以0字节分隔.因此将其视为以前0字节结尾的C字符串,只会为您提供进程名称.将所有0个字节替换read为空格返回的大小,然后重试.
这是证明:
$ hexdump -bc < /proc/32096/cmdline
0000000 142 141 163 150 000 055 162 143 146 151 154 145 000 056 142 141
0000000 b a s h \0 - r c f i l e \0 . b a
0000010 163 150 162 143 000
0000010 s h r c \0
0000015
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2715 次 |
| 最近记录: |