我怎样才能获得传递给正在运行的进程的命令行工具?

在Linux平台上,如果我在控制台ps -p "pid" -o command写入,那么当我运行程序的时候,我会得到所有在terminal中传递的参数。 在控制台输出如下所示: COMMAND gedit /home/sasha/Work/unloker/main.cpp (Ubuntu) 。 现在我正在编写主要目的是获得完整的input命令行的程序。 我的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; } } 

并输出我的程序是这样的: 10753 gedit gedit ,但是我怎么能得到完整的命令行,当ps -p "pid" -o command

在运行程序的/proc/%d/ keep full命令行中的哪个位置? 在Solaris系统中,我知道存在的命令pargs是我想要的,可能是现在如何find这个命令的来源?

/ proc / pid / cmdline中的参数是以0字节分隔的字符串列表。 因此将它视为C字符串,它以前0个字节结尾,只会给出进程名称。 将所有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 bash \0 - rcfile \0 . ba 0000010 163 150 162 143 000 0000010 shrc \0 0000015 

在Linux中,正在运行的进程信息存储在/ proc /文件夹中 –
/ proc / {PROCESS_ID} / cmdline是确切的 – 例如这里是chrome-

  $cat /proc/3193/cmdline /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/OmniboxDisallowInlineHQP/Standard/OmniboxSearchSuggest/6/Prerender/ContentPrefetchPrerender1/ProxyConnectionImpact/proxy_connections_32/SBInterstitial/V2/SpdyImpact/spdy3/UMA-Dynamic-Binary-Uniformity-Trial/default/UMA-Uniformity-Trial-1-Percent/group_31/UMA-Uniformity-Trial-10-Percent/group_05/UMA-Uniformity-Trial-20-Percent/default/UMA-Uniformity-Trial-5-Percent/group_13/UMA-Uniformity-Trial-50-Percent/group_01/WarmSocketImpact/warmest_socket/ --enable-crash-reporter=81A0480CAE65B69A53CE6E791EAA05A5,Ubuntu 10.10 --disable-client-side-phishing-detection --renderer-print-preview --disable-accelerated-2d-canvas --channel=2980.13.513987986