如何将命令行参数传递给正在运行的进程?

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,它做我想要的,可能是现在我怎么可能找到这个命令的来源?

Jan*_*dec 6

/ 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)