Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: base/command_line.cc

Issue 196009: Linux: set the process title (that shows in "ps" etc.) of renderers correctly when using the zygote. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/command_line.h ('k') | base/setproctitle_linux.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/command_line.h" 5 #include "base/command_line.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #elif defined(OS_FREEBSD)
11 #include <stdlib.h>
12 #include <unistd.h>
10 #endif 13 #endif
11 14
12 #include <algorithm> 15 #include <algorithm>
13 16
14 #include "base/logging.h" 17 #include "base/logging.h"
15 #include "base/singleton.h" 18 #include "base/singleton.h"
16 #include "base/string_piece.h" 19 #include "base/string_piece.h"
17 #include "base/string_util.h" 20 #include "base/string_util.h"
18 #include "base/sys_string_conversions.h" 21 #include "base/sys_string_conversions.h"
19 22
23 #if defined(OS_LINUX)
24 // Linux/glibc doesn't natively have setproctitle().
25 #include "base/setproctitle_linux.h"
26 #endif
27
20 CommandLine* CommandLine::current_process_commandline_ = NULL; 28 CommandLine* CommandLine::current_process_commandline_ = NULL;
21 29
22 // Since we use a lazy match, make sure that longer versions (like L"--") 30 // Since we use a lazy match, make sure that longer versions (like L"--")
23 // are listed before shorter versions (like L"-") of similar prefixes. 31 // are listed before shorter versions (like L"-") of similar prefixes.
24 #if defined(OS_WIN) 32 #if defined(OS_WIN)
25 const wchar_t* const kSwitchPrefixes[] = {L"--", L"-", L"/"}; 33 const wchar_t* const kSwitchPrefixes[] = {L"--", L"-", L"/"};
26 const wchar_t kSwitchTerminator[] = L"--"; 34 const wchar_t kSwitchTerminator[] = L"--";
27 const wchar_t kSwitchValueSeparator[] = L"="; 35 const wchar_t kSwitchValueSeparator[] = L"=";
28 #elif defined(OS_POSIX) 36 #elif defined(OS_POSIX)
29 // Unixes don't use slash as a switch. 37 // Unixes don't use slash as a switch.
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 void CommandLine::Init(const std::vector<std::string>& argv) { 195 void CommandLine::Init(const std::vector<std::string>& argv) {
188 DCHECK(current_process_commandline_ == NULL); 196 DCHECK(current_process_commandline_ == NULL);
189 #if defined(OS_WIN) 197 #if defined(OS_WIN)
190 current_process_commandline_ = new CommandLine; 198 current_process_commandline_ = new CommandLine;
191 current_process_commandline_->ParseFromString(::GetCommandLineW()); 199 current_process_commandline_->ParseFromString(::GetCommandLineW());
192 #elif defined(OS_POSIX) 200 #elif defined(OS_POSIX)
193 current_process_commandline_ = new CommandLine(argv); 201 current_process_commandline_ = new CommandLine(argv);
194 #endif 202 #endif
195 } 203 }
196 204
205 #if defined(OS_LINUX) || defined(OS_FREEBSD)
206 // static
207 void CommandLine::SetProcTitle() {
208 // Build a single string which consists of all the arguments separated
209 // by spaces. We can't actually keep them separate due to the way the
210 // setproctitle() function works.
211 std::string title;
212 for (size_t i = 1; i < current_process_commandline_->argv_.size(); ++i) {
213 if (!title.empty())
214 title += " ";
215 title += current_process_commandline_->argv_[i];
216 }
217 setproctitle("%s", title.c_str());
218 }
219
220 // static
221 void CommandLine::SetTrueArgv(char** argv) {
222 #if defined(OS_LINUX)
223 setproctitle_init(argv);
224 #endif
225 }
226 #endif
227
197 void CommandLine::Terminate() { 228 void CommandLine::Terminate() {
198 DCHECK(current_process_commandline_ != NULL); 229 DCHECK(current_process_commandline_ != NULL);
199 delete current_process_commandline_; 230 delete current_process_commandline_;
200 current_process_commandline_ = NULL; 231 current_process_commandline_ = NULL;
201 } 232 }
202 233
203 bool CommandLine::HasSwitch(const std::wstring& switch_string) const { 234 bool CommandLine::HasSwitch(const std::wstring& switch_string) const {
204 std::wstring lowercased_switch(switch_string); 235 std::wstring lowercased_switch(switch_string);
205 #if defined(OS_WIN) 236 #if defined(OS_WIN)
206 Lowercase(&lowercased_switch); 237 Lowercase(&lowercased_switch);
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 void CommandLine::PrependWrapper(const std::wstring& wrapper_wide) { 400 void CommandLine::PrependWrapper(const std::wstring& wrapper_wide) {
370 // The wrapper may have embedded arguments (like "gdb --args"). In this case, 401 // The wrapper may have embedded arguments (like "gdb --args"). In this case,
371 // we don't pretend to do anything fancy, we just split on spaces. 402 // we don't pretend to do anything fancy, we just split on spaces.
372 const std::string wrapper = base::SysWideToNativeMB(wrapper_wide); 403 const std::string wrapper = base::SysWideToNativeMB(wrapper_wide);
373 std::vector<std::string> wrapper_and_args; 404 std::vector<std::string> wrapper_and_args;
374 SplitString(wrapper, ' ', &wrapper_and_args); 405 SplitString(wrapper, ' ', &wrapper_and_args);
375 argv_.insert(argv_.begin(), wrapper_and_args.begin(), wrapper_and_args.end()); 406 argv_.insert(argv_.begin(), wrapper_and_args.begin(), wrapper_and_args.end());
376 } 407 }
377 408
378 #endif 409 #endif
OLDNEW
« no previous file with comments | « base/command_line.h ('k') | base/setproctitle_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698