#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Init Utilities"

config INIT
	bool "init"
	default n
	select FEATURE_SYSLOG
	help
	  init is the first program run when the system boots.

config FEATURE_USE_INITTAB
	bool "Support reading an inittab file"
	default y
	depends on INIT
	help
	  Allow init to read an inittab file when the system boot.

config FEATURE_KILL_REMOVED
	bool "Support killing processes that have been removed from inittab"
	default y
	depends on FEATURE_USE_INITTAB
	help
	  When respawn entries are removed from inittab and a SIGHUP is
	  sent to init, this feature will kill the processes that have
	  been removed.

config FEATURE_KILL_DELAY
	int "How long to wait between TERM and KILL (0 - send TERM only)" if FEATURE_KILL_REMOVED
	range 0 1024
	default 0
	help
	  With nonzero setting, init sends TERM, forks, child waits N
	  seconds, sends KILL and exits. Setting it too high is unwise
	  (child will hang around for too long and can actually kill
	  wrong process!)

config FEATURE_INIT_SCTTY
	bool "Run commands with leading dash with controlling tty"
	default n
	depends on INIT
	help
	  If this option is enabled, init will try to give a controlling
	  tty to any command which has leading hyphen (often it's "-/bin/sh").
	  More precisely, init will do "ioctl(STDIN_FILENO, TIOCSCTTY, 0)".
	  If device attached to STDIN_FILENO can be a ctty but is not yet
	  a ctty for other session, it will become this process' ctty.
	  This is not the traditional init behavour, but is often what you want
	  in an embedded system where the console is only accessed during
	  development or for maintenance.
	  NB: using cttyhack applet may work better.

config FEATURE_INIT_SYSLOG
	bool "Enable init to write to syslog"
	default n
	depends on INIT

config FEATURE_EXTRA_QUIET
	bool "Be _extra_ quiet on boot"
	default y
	depends on INIT
	help
	  Prevent init from logging some messages to the console during boot.

config FEATURE_INIT_COREDUMPS
	bool "Support dumping core for child processes (debugging only)"
	default n
	depends on INIT
	help
	  If this option is enabled and the file /.init_enable_core
	  exists, then init will call setrlimit() to allow unlimited
	  core file sizes. If this option is disabled, processes
	  will not generate any core files.

config FEATURE_INITRD
	bool "Support running init from within an initrd (not initramfs)"
	default y
	depends on INIT
	help
	  Legacy support for running init under the old-style initrd. Allows
	  the name linuxrc to act as init, and it doesn't assume init is PID 1.

	  This does not apply to initramfs, which runs /init as PID 1 and
	  requires no special support.

config HALT
	bool "poweroff, halt, and reboot"
	default n
	help
	  Stop all processes and either halt, reboot, or power off the system.

config MESG
	bool "mesg"
	default n
	help
	  Mesg controls access to your terminal by others. It is typically
	  used to allow or disallow other users to write to your terminal

endmenu
