#
# 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
