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

menu "Process Utilities"

config CONFIG_FREE
	bool "free"
	default n
	help
	  free displays the total amount of free and used physical and swap
	  memory in the system, as well as the buffers used by the kernel.
	  The shared memory column should be ignored; it is obsolete.

config CONFIG_KILL
	bool "kill"
	default n
	help
	  The command kill sends the specified signal to the specified
	  process or process group.  If no signal is specified, the TERM
	  signal is sent.

config CONFIG_KILLALL
	bool "killall"
	default n
	depends on CONFIG_KILL
	help
	  killall sends a signal to all processes running any of the
	  specified commands.  If no signal name is specified, SIGTERM is
	  sent.

config CONFIG_PIDOF
	bool "pidof"
	default n
	help
	  Pidof finds the process id's (pids) of the named programs. It prints
	  those id's on the standard output.

config CONFIG_FEATURE_PIDOF_SINGLE
	bool "  Enable argument for single shot (-s)"
	default n
	depends on CONFIG_PIDOF
	help
	  Support argument '-s' for returning only the first pid found.

config CONFIG_FEATURE_PIDOF_OMIT
	bool "  Enable argument for omitting pids (-o)"
	default n
	depends on CONFIG_PIDOF
	help
	  Support argument '-o' for omitting the given pids in output.
	  The special pid %PPID can be used to name the parent process
	  of the pidof, in other words the calling shell or shell script.

config CONFIG_PS
	bool "ps"
	default n
	help
	  ps gives a snapshot of the current processes.

config CONFIG_FEATURE_PS_WIDE
	bool "  Enable argument for wide output (-w)"
	default n
	depends on CONFIG_PS
	help
	  Support argument 'w' for wide output.
	  If given once, 132 chars are printed and given more than
	  one, the length is unlimited.

config CONFIG_RENICE
	bool "renice"
	default n
	help
	  Renice alters the scheduling priority of one or more running
	  processes.

config CONFIG_BB_SYSCTL
	bool "sysctl"
	default n
	help
	  Configure kernel parameters at runtime.

config CONFIG_TOP
	bool "top"
	default n
	help
	  The top program provides a dynamic real-time view of a running
	  system.

config CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
	bool "  Support showing CPU usage percentage (add 2k bytes)"
	default y
	depends on CONFIG_TOP
	help
	  Make top display CPU usage.

config CONFIG_UPTIME
	bool "uptime"
	default n
	help
	  uptime gives a one line display of the current time, how long
	  the system has been running, how many users are currently logged
	  on, and the system load averages for the past 1, 5, and 15 minutes.

endmenu

