#
# 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
	  Please submit a patch to add help text for this item.

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

