#
# 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_FUSER
	bool "fuser"
	default n
	help
	  fuser lists all PIDs (Process IDs) that currently have a given
	  file open.  fuser can also list all PIDs that have a given network
	  (TCP or UDP) port open.

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

