• VMware

    Learn about VMware virtualization for its products like vsphere ESX and ESXi, vCenter Server, VMware View, VMware P2V and many more

  • Linux

    Step by step configuration tutorials for many of the Linux services like DNS, DHCP, FTP, Samba4 etc including many tips and tricks in Red Hat Linux.

  • Database

    Learn installation and configuration of databases like Oracle, My SQL, Postgresql, etc including many other related tutorials in Linux.

  • Life always offers you a second chance ... Its called tomorrow !!!

    Monday, November 24, 2014

    How to keep a process running after putty or terminal is closed

    There can be many times where you are suppose to run some application or process in Linux but you don not want it to be terminated by logoff and session disconnection from putty.

    nohup command

    `nohup' runs the given COMMAND with hangup signals ignored, so that the command can continue running in the background after you log out.

    Syntax
    # nohup COMMAND [ARG]...
    If standard input is a terminal, it is redirected from `/dev/null' so that terminal sessions do not mistakenly consider the terminal to be used by the command.

    If standard output is a terminal, the command's standard output is appended to the file `nohup.out'; if that cannot be written to, it is appended to the file `$HOME/nohup.out'; and if that cannot be written to, the command is not run.  Any `nohup.out' or `$HOME/nohup.out' file created by `nohup' is made readable and writable only to the user, regardless of the current umask settings.

    If standard error is a terminal, it is normally redirected to the same file descriptor as the (possibly-redirected) standard output. However, if standard output is closed, standard error terminal output is instead appended to the file `nohup.out' or `$HOME/nohup.out' as above.

    For Example:
    In this case the output is appended to ~/nohup.out file
    # nohup less /var/log/messages
    nohup: ignoring input and appending output to `nohup.out'

    NOTE: nohup does not automatically put the command it runs in the background; you must do that explicitly, by ending the command line with an `&'.

    You can supress this message and restrict the command from producing or saving any output to nohup.out using the below commands and redirection
    # nohup seq 1223434 > file.txt </dev/null &>/dev/null &
    [1] 3185

    OR
    # nohup seq 1234568 > file.txt 2>&1  &
    [1] 3184

    OR# nohup seq 1234568 > file.txt 2>/dev/null  &
    [1] 3192


    Stadard in, out and err
    There are three standard sources of input and output for a program. The program usually prints to standard output, and sometimes prints to standard error. These three file descriptors (you can think of them as “data pipes”) are often called STDIN, STDOUT, and STDERR.

    Sometimes they’re not named, they’re numbered! The built-in numberings for them are 0, 1, and 2 for STDIN, STDOUT and STDERR respectively.

    disown command

    You can also use this command to run any process without any disruption of active terminal or session

    If run without any options disown removes the JobID from the list of active jobs. As for now lets see how it can run any process in the background even after the terminal is closed or logged off.

    Run a process in background
    # seq 1223434232 > file.txt &
    [1] 3879

    # disown -h 3879
    # top
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     3879 root      20   0  4084  564  512 R 99.0  0.1   0:23.00 seq

    After this I disconnected my complete session and re-logged in to verify if my process is still running
    # top
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     3879 root      20   0  4084  564  512 R 99.9  0.1   1:01.11 seq

    And yes its still in the running status.

    If you use disown command without any switch it will remove all the stopped jobs.

    For Example
    If any of your running process which is stopped by using (Ctrl + Z) can be seen by using
    # jobs
    [1]   Running                 seq 122354332 > file.txt &
    [2]-  Running                 seq 17653434232 > file.txt &
    [3]+  Stopped                 seq 127564232 > file.txt

    Run the disown command without any argument by default it will delete the last stopped processes which in our case is (3)
    # disown
    -bash: warning: deleting stopped job 3 with process group 3896

    In case you want to delete a particular stopped job
    # disown %3
    -bash: warning: deleting stopped job 3 with process group 3904

    To delete all the stopped jobs
    # disown -a
    -bash: warning: deleting stopped job 1 with process group 3915
    -bash: warning: deleting stopped job 2 with process group 3916
    -bash: warning: deleting stopped job 3 with process group 3917
    -bash: warning: deleting stopped job 4 with process group 3918


    Related Articles:
    10 examples to help you understand top command usage in Unix/Linux
    How to run a process in background or bring to foreground in Linux
    How to run any script or cron job in Linux for every second

    Follow the below links for more tutorials

    How to find the path of any command in Linux
    How to configure a Clustered Samba share using ctdb in Red Hat Cluster
    How to delete an iscsi-target from openfiler and Linux
    How to perform a local ssh port forwarding in Linux
    How to use yum locally without internet connection using cache?
    What is umask and how to change the default value permanently?
    Understanding Partition Scheme MBR vs GPT
    How does a successful or failed login process works in Linux
    How to find all the process accessing a file in Linux
    How to exclude multiple directories from du command in Linux
    How to configure autofs in Linux and what are its advantages?
    How to resize software raid partition in Linux
    How to configure Software RAID 1 mirroring in Linux
    How to prevent a command from getting stored in history in Linux

    0 comments:

    Post a Comment