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

menu "Process Utilities"

INSERT

config FREE
	bool "free"
	default y
	depends on PLATFORM_LINUX #sysinfo()
	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 y
	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 y
	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 y
	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 y
	depends on KILL

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

config PGREP
	bool "pgrep"
	default y
	help
	  Look for processes by name.

config PIDOF
	bool "pidof"
	default y
	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 y
	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 y
	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 y
	help
	  Send signals to processes by name.

config PS
	bool "ps"
	default y
	help
	  ps gives a snapshot of the current processes.

config FEATURE_PS_WIDE
	bool "Enable wide output option (-w)"
	default y
	depends on PS
	help
	  Support argument 'w' for wide output.
	  If given once, 132 chars are printed, and if given more
	  than once, the length is unlimited.

config FEATURE_PS_TIME
	bool "Enable time and elapsed time output"
	default y
	depends on PS && DESKTOP && PLATFORM_LINUX #sysinfo()
	help
	  Support -o time and -o etime output specifiers.

config FEATURE_PS_ADDITIONAL_COLUMNS
	bool "Enable additional ps columns"
	default y
	depends on PS && DESKTOP
	help
	  Support -o rgroup, -o ruser, -o nice 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 y
	help
	  Renice alters the scheduling priority of one or more running
	  processes.

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

config TOP
	bool "top"
	default y
	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 y
	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 y
	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 y
	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 y
	depends on TOP
	help
	  Enable 's' in top (gives lots of memory info).

config FEATURE_SHOW_THREADS
	bool "Support for showing threads in ps/top"
	default y
	depends on PS || TOP
	help
	  Enables ps -T option and 'h' command in top

config UPTIME
	bool "uptime"
	default y
	depends on PLATFORM_LINUX #sysinfo()
	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 y
	help
	  watch is used to execute a program periodically, showing
	  output to the screen.

endmenu
