- How to get a list of programs running with nohup
- 7 Answers 7
- Linux List Processes – How to Check Running Processes
- Prerequisites
- A Quick Introduction to Linux Processes
- How to List Running Processes in Linux using the ps Command
- How to List Running Processes in Linux using the top and htop Commands
- How to Kill Running Processes in Linux
- Conclusion
How to get a list of programs running with nohup
I am accessing a server running CentOS (linux distribution) with an SSH connection. Since I can’t always stay logged in, I use «nohup [command] &» to run my programs. I couldn’t find how to get a list of all the programs I started using nohup. «jobs» only works out before I log out. After that, if I log back again, the jobs command shows me nothing, but I can see in my log files that my programs are still running. Is there a way to get a list of all the programs that I started using «nohup» ?
Found an excellent article that can help with the question: cyberciti.biz/faq/…. Most importantly, it’s helpful if you can interpret the output of the ps command, especially the stat column. If you don’t, go read the article NOW 😉
7 Answers 7
When I started with $ nohup storm dev-zookeper ,
METHOD1 : using jobs ,
prayagupd@prayagupd:/home/vmfest# jobs -l [1]+ 11129 Running nohup ~/bin/storm/bin/storm dev-zookeeper &
NOTE: jobs shows nohup processes only on the same terminal session where nohup was started. If you close the terminal session or try on new session it won’t show the nohup processes. Prefer METHOD2
METHOD2 : using ps command.
$ ps xw PID TTY STAT TIME COMMAND 1031 tty1 Ss+ 0:00 /sbin/getty -8 38400 tty1 10582 ? S 0:01 [kworker/0:0] 10826 ? Sl 0:18 java -server -Dstorm.options= -Dstorm.home=/root/bin/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dsto 10853 ? Ss 0:00 sshd: vmfest [priv]
TTY column with ? => nohup running programs.
Description
- TTY column = the terminal associated with the process
- STAT column = state of a process
- S = interruptible sleep (waiting for an event to complete)
- l = is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
$ man ps # then search /PROCESS STATE CODES
Method 2 does not list the programs that were started with nohup . It lists the processes that are not attached to a TTY, which is a completely different thing: processes started with nohup remain attached to their parent TTY until it is closed; processes that are not attached to a TTY were not necessarily started with nohup . That is, method 2 lists, among other processes, some of the programs running with nohup .
jobs doesn’t work for me, only works for a same ssh session, if I disconnect and connect again it no longer lists the previously listed running nohup process
Instead of nohup , you should use screen . It achieves the same result — your commands are running «detached». However, you can resume screen sessions and get back into their «hidden» terminal and see recent progress inside that terminal.
screen has a lot of options. Most often I use these:
To start first screen session or to take over of most recent detached one:
To detach from current session: Ctrl+A Ctrl+D
You can also start multiple screens — read the docs.
Question clearly asks Is there a way to get a list of all the programs that I started using «nohup»?, yet this answer doesn’t even slightly address the question. Why is it accepted?
If you have standart output redirect to «nohup.out» just see who use this file
That is a smart way. But in my case this returns no results. Although I’m sure that the nohup command is still runing, and it’s using the nohup.out file.
@NabiK.A.Z. from man lsof : «In general threads and tasks inherit the files of the caller, but may close some and open others, so lsof always reports all the open files of threads and tasks.» I couldn’t find information on nohup in its man, but it seems it uses two threads, not one.
You cannot exactly get a list of commands started with nohup but you can see them along with your other processes by using the command ps x . Commands started with nohup will have a question mark in the TTY column.
You can also just use the top command and your user ID will indicate the jobs running and the their times.
(this will show all running jobs)
(This will show jobs that are specific for the user ID)
Additionally, the nice thing about this is that it stays on your console so you can watch the job and know when it finishes
sudo lsof | grep nohup.out | awk '' | sort -u | while read i; do ps -o args= $i; done
returns all processes that use the nohup.out file
From personal experience, I prefer the top command, see javapoint for more examples how to use top . As user Jcrow06 already suggested, running top will show you all running jobs on the server and if one is only interested in the jobs of a specific [userid], one can simply run top -u [userid] .
The benefit of running top is that all running processes are shown (including nohup processes, even when started in the background), also ones that are not from the current terminal session or from a different user. Furthermore, one can see with top how much CPU and memory the task takes and for how long it is already running. Which can be helpful to determine if it is still running correctly.
Note top by default orders tasks on CPU usages, but one can adjust the ordering if needed. Furthermore, if you notice unwanted tasks, you can kill them easily by pressing k followed by the processID PID .
Linux List Processes – How to Check Running Processes
Bolaji Ayodeji
Every day, developers use various applications and run commands in the terminal. These applications can include a browser, code editor, terminal, video conferencing app, or music player.
For each of these software applications that you open or commands you run, it creates a process or task.
One beautiful feature of the Linux operating system and of modern computers in general is that they provide support for multitasking. So multiple programs can run at the same time.
Have you ever wondered how you can check all the programs running on your machine? Then this article is for you, as I’ll show you how to list, manage, and kill all the running processes on your Linux machine.
Prerequisites
- A Linux distro installed.
- Basic knowledge of navigating around the command-line.
- A smile on your face 🙂
A Quick Introduction to Linux Processes
A process is an instance of a running computer program that you can find in a software application or command.
For example, if you open your Visual Studio Code editor, that creates a process which will only stop (or die) once you terminate or close the Visual Studio Code application.
Likewise, when you run a command in the terminal (like curl ifconfig.me ), it creates a process that will only stop when the command finishes executing or is terminated.
How to List Running Processes in Linux using the ps Command
You can list running processes using the ps command (ps means process status). The ps command displays your currently running processes in real-time.
To test this, just open your terminal and run the ps command like so:
This will display the process for the current shell with four columns:
- PID returns the unique process ID
- TTY returns the terminal type you’re logged into
- TIME returns the total amount of CPU usage
- CMD returns the name of the command that launched the process.
You can choose to display a certain set of processes by using any combination of options (like -A -a , -C , -c , -d , -E , -e , -u , -X , -x , and others).
If you specify more than one of these options, then all processes which are matched by at least one of the given options will be displayed.
Type man ps in your terminal to read the manual for the ps command, which has a complete reference for all options and their uses.
To display all running processes for all users on your machine, including their usernames, and to show processes not attached to your terminal, you can use the command below:
Here’s a breakdown of the command:
- ps : is the process status command.
- a : displays information about other users’ processes as well as your own.
- u : displays the processes belonging to the specified usernames.
- x : includes processes that do not have a controlling terminal.
This will display the process for the current shell with eleven columns:
- USER returns the username of the user running the process
- PID returns the unique process ID
- %CPU returns the percentage of CPU usage
- %MEM returns the percentage memory usage
- VSV returns the virtual size in Kbytes
- RSS returns the resident set size
- TT returns the control terminal name
- STAT returns the symbolic process state
- STARTED returns the time started
- CMD returns the command that launched the process.
How to List Running Processes in Linux using the top and htop Commands
You can also use the top task manager command in Linux to see a real-time sorted list of top processes that use the most memory or CPU.
Type top in your terminal and you’ll get a result like the one you see in the screenshot below:
An alternative to top is htop which provides an interactive system-monitor to view and manage processes. It also displays a real-time sorted list of processes based on their CPU usage, and you can easily search, filter, and kill running processes.
htop is not installed on Linux by default, so you need to install it using the command below or download the binaries for your preferred Linux distro.
sudo apt update && sudo apt install htop
Just type htop in your terminal and you’ll get a result like the one you see in the screenshot below:
How to Kill Running Processes in Linux
Killing a process means that you terminate a running application or command. You can kill a process by running the kill command with the process ID or the pkill command with the process name like so:
To find the process ID of a running process, you can use the pgrep command followed by the name of the process like so:
To kill the iTerm2 process in the screenshot above, we will use any of the commands below. This will automatically terminate and close the iTerm2 process (application).
Conclusion
When you list running processes, it is usually a long and clustered list. You can pipe it through less to display the command output one page at a time in your terminal like so:
or display only a specific process that matches a particular name like so:
I hope that you now understand what Linux processes are and how to manage them using the ps , top , and htop commands.
Make sure to check out the manual for each command by running man ps , man top , or man htop respectively. The manual includes a comprehensive reference you can check if you need any more help at any point.
Thanks for reading – cheers! 💙