#
# 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_PS
	bool "ps"
	default n
	help
	  ps gives a snapshot of the current processes.

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

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

config FEATURE_CPU_USAGE_PERCENTAGE
	bool "  Support show 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

