簡體   English   中英

如何獲取傳遞給正在運行的進程的命令行參數?

[英]How can I get command line arguments passed to the running process?

在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;
  }
}

和我的程序的輸出是這樣的: 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

在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM