#
# 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 DEBUG_INIT
	bool "debugging aid"
	default n
	depends on INIT
	help
	  Turn this on to disable all the dangerous
	  rebooting stuff when debugging.

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 "Support running commands with a controlling-tty"
	default n
	depends on INIT
	help
	  If this option is enabled a command starting with hyphen (-)
	  is run in its own session (setsid(2)) and possibly with a
	  controlling tty (TIOCSCTTY).  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 y
	help
	  Stop all processes and either halt, reboot, or power off the system.

config MESG
	bool "mesg"
	default y
	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
