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

menu "Process Utilities"

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 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 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 KILLALL
	bool "killall"
	default n
	depends on 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 KILLALL5
	bool "killall5"
	default n
	depends on KILL

config NMETER
	bool "nmeter"
	default n
	help
	  Prints selected system stats continuously, one line per update.

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 FEATURE_PIDOF_SINGLE
	bool "Enable argument for single shot (-s)"
	default n
	depends on PIDOF
	help
	  Support argument '-s' for returning only the first pid found.

config FEATURE_PIDOF_OMIT
	bool "Enable argument for omitting pids (-o)"
	default n
	depends on 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 PS
	bool "ps"
	default n
	help
	  ps gives a snapshot of the current processes.

config FEATURE_PS_WIDE
	bool "Enable argument for wide output (-w)"
	default n
	depends on 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 RENICE
	bool "renice"
	default n
	help
	  Renice alters the scheduling priority of one or more running
	  processes.

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

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

config FEATURE_TOP_CPU_USAGE_PERCENTAGE
	bool "Show CPU per-process usage percentage (adds 2k bytes)"
	default y
	depends on TOP
	help
	  Make top display CPU usage for each process.

config FEATURE_TOP_CPU_GLOBAL_PERCENTS
	bool "Show CPU global usage percentage (adds 0.5k bytes)"
	default y
	depends on FEATURE_TOP_CPU_USAGE_PERCENTAGE
	help
	  Makes top display "CPU: NN% usr NN% sys..." line.

config FEATURE_TOP_DECIMALS
	bool "Show 1/10th of a percent in CPU/mem statistics (adds 0.3k bytes)"
	default n
	depends on FEATURE_TOP_CPU_USAGE_PERCENTAGE
	help
	  Show 1/10th of a percent in CPU/mem statistics.

config FEATURE_TOPMEM
	bool "topmem"
	default n
	depends on TOP
	help
	  Enable 's' in top (gives lots of memory info)

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.

config WATCH
	bool "watch"
	default n
	#huh?? select DATE
	help
	  watch is used to execute a program periodically, showing
	  output to the screen.


endmenu

