#
# 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 PGREP
	bool "pgrep"
	default n
	help
	  Look for processes by name.

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 PKILL
	bool "pkill"
	default n
	help
	  Send signals to processes by name.

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 FEATURE_PS_TIME
	bool "Enable time and elapsed time output"
	default n
	depends on PS && DESKTOP
	help
	  Support -o time and -o etime output specifiers.

config FEATURE_PS_UNUSUAL_SYSTEMS
	bool "Support Linux prior to 2.4.0 and non-ELF systems"
	default n
	depends on FEATURE_PS_TIME
	help
	  Include support for measuring HZ on old kernels and non-ELF systems
	  (if you are on Linux 2.4.0+ and use ELF, you don't need this)

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"
	default y
	depends on TOP
	help
	  Make top display CPU usage for each process.
	  This adds about 2k.

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

config FEATURE_TOP_SMP_CPU
	bool "SMP CPU usage display ('c' key)"
	default n
	depends on FEATURE_TOP_CPU_GLOBAL_PERCENTS
	help
	  Allow 'c' key to switch between individual/cumulative CPU stats
	  This adds about 0.5k.

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

config FEATURE_TOP_SMP_PROCESS
	bool "Show CPU process runs on ('j' field)"
	default n
	depends on TOP
	help
	  Show CPU where process was last found running on.
	  This is the 'j' field.

config FEATURE_TOPMEM
	bool "Topmem command ('s' key)"
	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
	help
	  watch is used to execute a program periodically, showing
	  output to the screen.


endmenu
