How to get a list of programs running with nohup
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)
Reference
$ man ps
# then search /PROCESS STATE CODES
Find the Process run by nohup command
ps auxwww|grep -i 'server'
should return all process which has server
in them. Otherwise, server may have already stopped.
You should be able to determine the PID (and store it in a file) as follows:
nohup server &
print $! >> my_server.pid
How to get the process ID to kill a nohup process?
When using nohup
and you put the task in the background, the background operator (&
) will give you the PID at the command prompt. If your plan is to manually manage the process, you can save that PID and use it later to kill the process if needed, via kill PID
or kill -9 PID
(if you need to force kill). Alternatively, you can find the PID later on by ps -ef | grep "command name"
and locate the PID from there. Note that nohup
keyword/command itself does not appear in the ps
output for the command in question.
If you use a script, you could do something like this in the script:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
This will run my_command
saving all output into my.log
(in a script, $!
represents the PID of the last process executed). The 2
is the file descriptor for standard error (stderr
) and 2>&1
tells the shell to route standard error output to the standard output (file descriptor 1
). It requires &1
so that the shell knows it's a file descriptor in that context instead of just a file named 1
. The 2>&1
is needed to capture any error messages that normally are written to standard error into our my.log
file (which is coming from standard output). See I/O Redirection for more details on handling I/O redirection with the shell.
If the command sends output on a regular basis, you can check the output occasionally with tail my.log
, or if you want to follow it "live" you can use tail -f my.log
. Finally, if you need to kill the process, you can do it via:
kill -9 `cat save_pid.txt`
rm save_pid.txt
How can I look into nohup file while the program is still running?
We have to Just open nohup.out
to see output. Probably you want
tail -f nohup.out
for streaming output
How can I see the output console after running a nohup command?
You can redirect standard output and standard error to a file and look at that file. eg:
nohup command 2>&1 > outputfile &
note default behavior from man page:
If standard output is a terminal, append output to 'nohup.out' if
possible, '$HOME/nohup.out' otherwise. If standard error is a
terminal, redirect it to standard output
so really you can just run
nohup command &
and then look in nohup.out
Job -l after nohup
You need to understand the difference between a process and a job. Jobs are managed by the shell, so when you end your terminal session and start a new one, you are now in a new instance of Bash with its own jobs table. You can't access jobs from the original shell but as the other answers have noted, you can still find and manipulate the processes that were started. For example:
$ nohup sleep 60 &
[1] 27767
# Our job is in the jobs table
$ jobs
[1]+ Running nohup sleep 60 &
# And this is the process we started
$ ps -p 27767
PID TTY TIME CMD
27767 pts/1 00:00:00 sleep
$ exit # and start a new session
# Now jobs returns nothing because the jobs table is empty
$ jobs
# But our process is still alive and kicking...
$ ps -p 27767
PID TTY TIME CMD
27767 pts/1 00:00:00 sleep
# Until we decide to kill it
$ kill 27767
# Now the process is gone
$ ps -p 27767
PID TTY TIME CMD
how to find whether a script run as a nohup finished or not?
At the beginning of your shell script, write the PID to a file (for example, in /var/run). Then, you can just search for that PID to know if the process is done or not. You can get the PID of your shell script using the built-in $$
variable.
To record the PID, put at the top of your script:
echo $$ > /var/run/myscript.pid
Then, to check if it's still running:
ps -p `cat /var/run/myscript.pid`
You might not be able to write into /var/run
as a normal user. If not, just use /tmp
Running process nohup
You are using nohup
right from what I know. But you have an issue detecting the process.
jobs -l
only give the processes of current session. Rather try the below to display the process started in your initial session:
ps -eafww|grep run_terasort.sh|grep -v grep
Related Topics
How to Gzip All Files in All Sub-Directories into One Compressed File in Bash
How to Recompile Just a Single Kernel Module
How to Copy Text from My Xterm Without a Mouse
Indenting Multi-Line Output in a Shell Script
When Grep "\\" Xxfile I Got "Trailing Backslash"
Should I Put Trailing Slash After Source and Destination When Copy Folders
Linux Command to Check New Files in File System
How to Run Processes Piped with Bash on Multiple Cores
What Is the Fastest Way to Find All the File with the Same Inode
What Does "Soft/Hard Nofile" Mean on Linux
How to Format My Grep Output to Show Line Numbers at the End of the Line, and Also the Hit Count
How to Include File in a Bash Shell Script
How to Clean Caches Used by the Linux Kernel
In Linux, What Do All the Values in the "Top" Command Mean
Given Two Directory Trees How to Find Which Files Are the Same