init: make the command-line rewrite optional
When launched as PID 1 and after parsing its arguments, init wipes all all of them except argv[0] and rewrites argv[0] to contain only "init", so that its command-line appears solely as "init" in tools such as ps. This patch adds the FEATURE_INIT_MODIFY_CMDLINE which, if set to n, will make init preserve all its arguments including argv[0], be they parsed or ignored. The original command-line used to launch init can then be retrieved in /proc/1/cmdline on Linux, for example. Signed-off-by: Nicolas Carrier <nicolas.carrier@parrot.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
383201e725
commit
29eae728e9
27
init/init.c
27
init/init.c
@ -102,6 +102,21 @@
|
||||
//config:
|
||||
//config: Note that on Linux, init attempts to detect serial terminal and
|
||||
//config: sets TERM to "vt102" if one is found.
|
||||
//config:
|
||||
//config:config FEATURE_INIT_MODIFY_CMDLINE
|
||||
//config: bool "Modify the command-line to \"init\""
|
||||
//config: default y
|
||||
//config: depends on INIT
|
||||
//config: help
|
||||
//config: When launched as PID 1 and after parsing its arguments, init
|
||||
//config: wipes all the arguments but argv[0] and rewrites argv[0] to
|
||||
//config: contain only "init", so that its command-line appears solely as
|
||||
//config: "init" in tools such as ps.
|
||||
//config: If this option is set to Y, init will keep its original behavior,
|
||||
//config: otherwise, all the arguments including argv[0] will be preserved,
|
||||
//config: be they parsed or ignored by init.
|
||||
//config: The original command-line used to launch init can then be
|
||||
//config: retrieved in /proc/1/cmdline on Linux, for example.
|
||||
|
||||
//applet:IF_INIT(APPLET(init, BB_DIR_SBIN, BB_SUID_DROP))
|
||||
//applet:IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, BB_DIR_ROOT, BB_SUID_DROP, linuxrc))
|
||||
@ -1138,11 +1153,13 @@ int init_main(int argc UNUSED_PARAM, char **argv)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Make the command line just say "init" - thats all, nothing else */
|
||||
strncpy(argv[0], "init", strlen(argv[0]));
|
||||
/* Wipe argv[1]-argv[N] so they don't clutter the ps listing */
|
||||
while (*++argv)
|
||||
nuke_str(*argv);
|
||||
if (ENABLE_FEATURE_INIT_MODIFY_CMDLINE) {
|
||||
/* Make the command line just say "init" - that's all, nothing else */
|
||||
strncpy(argv[0], "init", strlen(argv[0]));
|
||||
/* Wipe argv[1]-argv[N] so they don't clutter the ps listing */
|
||||
while (*++argv)
|
||||
nuke_str(*argv);
|
||||
}
|
||||
|
||||
/* Set up signal handlers */
|
||||
if (!DEBUG_INIT) {
|
||||
|
Loading…
Reference in New Issue
Block a user