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
19
init/init.c
19
init/init.c
@ -102,6 +102,21 @@
|
|||||||
//config:
|
//config:
|
||||||
//config: Note that on Linux, init attempts to detect serial terminal and
|
//config: Note that on Linux, init attempts to detect serial terminal and
|
||||||
//config: sets TERM to "vt102" if one is found.
|
//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_INIT(APPLET(init, BB_DIR_SBIN, BB_SUID_DROP))
|
||||||
//applet:IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, BB_DIR_ROOT, BB_SUID_DROP, linuxrc))
|
//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
|
#endif
|
||||||
|
|
||||||
/* Make the command line just say "init" - thats all, nothing else */
|
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]));
|
strncpy(argv[0], "init", strlen(argv[0]));
|
||||||
/* Wipe argv[1]-argv[N] so they don't clutter the ps listing */
|
/* Wipe argv[1]-argv[N] so they don't clutter the ps listing */
|
||||||
while (*++argv)
|
while (*++argv)
|
||||||
nuke_str(*argv);
|
nuke_str(*argv);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set up signal handlers */
|
/* Set up signal handlers */
|
||||||
if (!DEBUG_INIT) {
|
if (!DEBUG_INIT) {
|
||||||
|
Loading…
Reference in New Issue
Block a user