processes

All posts tagged processes by Linux Bash
  • Posted on

    Process management is a key concept when working with Bash and Linux/Unix-like systems. It involves handling the execution of programs or commands, tracking their status, and controlling their execution flow. In Bash, you can manage processes in several ways: running background processes, managing jobs, and using tools like ps to monitor processes. Below is an explanation of background processes, jobs, and how to use ps for process management.

    1. Background Processes

    A background process in Bash runs independently of the terminal session, allowing you to continue using the terminal while the process executes. This is useful for long-running tasks or when you need to run multiple tasks simultaneously.

    Running a Command in the Background

    To run a command in the background, append an & at the end of the command.

    sleep 60 &  # Run the sleep command in the background
    
    • The process starts running in the background, and Bash returns the prompt to you immediately.
    • The process will continue running even if you close the terminal, unless it's explicitly tied to the terminal session.

    Example:

    $ sleep 60 &
    [1] 12345
    

    Here, [1] is the job number, and 12345 is the process ID (PID) of the background process.

    2. Job Control in Bash

    Bash supports job control, which allows you to manage multiple processes that you have started in the background or in the foreground. You can suspend jobs, bring them to the foreground, or kill them.

    Listing Jobs

    To list the current jobs running in the background, use the jobs command:

    jobs
    

    Output example:

    [1]+ 12345 Running                 sleep 60 &
    [2]- 12346 Running                 sleep 100 &
    

    Each job has a job number (e.g., [1], [2]) and a process ID (PID). The + and - symbols represent the most recent job and the previous job, respectively.

    Bringing a Background Job to the Foreground

    To bring a background job to the foreground, use the fg command followed by the job number:

    fg %1
    

    This will bring job 1 (the one with job number [1]) to the foreground.

    Sending a Job to the Background

    If you've stopped a foreground job (e.g., by pressing Ctrl+Z), you can send it back to the background with the bg command:

    bg %1
    

    This resumes job 1 in the background.

    Stopping a Job

    If you want to stop a running job, you can suspend it by pressing Ctrl+Z. This sends a SIGTSTP signal to the process, which halts its execution temporarily.

    You can also use the kill command to send a termination signal (SIGTERM):

    kill %1  # Kill job 1
    

    To forcefully terminate a process, use the -9 option:

    kill -9 %1  # Force kill job 1
    

    Example: Job Control in Action

    $ sleep 100 &
    [1] 12345
    $ jobs
    [1]+ 12345 Running                 sleep 100 &
    $ fg %1
    sleep 100
    # Press Ctrl+Z to stop the job
    $ jobs
    [1]+ 12345 Stopped                 sleep 100
    $ bg %1
    [1]+ 12345 Running                 sleep 100 &
    

    3. Using ps to Monitor Processes

    The ps (process status) command is used to display information about running processes. It’s a versatile tool for monitoring system activity.

    Basic ps Command

    By default, ps shows processes running in the current terminal session:

    ps
    

    Output example:

    PID TTY          TIME CMD
    12345 pts/1    00:00:00 bash
    12346 pts/1    00:00:00 ps
    
    • PID: Process ID
    • TTY: Terminal associated with the process
    • TIME: CPU time the process has consumed
    • CMD: The command running

    Viewing All Processes

    To see all processes running on the system, use the -e or -A option:

    ps -e
    

    Or:

    ps -A
    

    This lists every process on the system, not just those tied to the current session.

    Viewing Detailed Information

    For more detailed information, use the -f (full-format listing) option:

    ps -ef
    

    This displays additional columns such as the parent process ID (PPID), user, and more.

    Output example:

    UID        PID  PPID  C STIME TTY      TIME     CMD
    1000      12345  1234  0 10:00 pts/1  00:00:00 bash
    1000      12346  12345  0 10:00 pts/1  00:00:00 ps
    
    • UID: User ID
    • PID: Process ID
    • PPID: Parent process ID
    • C: CPU utilization
    • STIME: Start time
    • TTY: Terminal type
    • TIME: Total CPU time used
    • CMD: Command name

    Viewing Process Tree

    You can view processes in a hierarchical tree-like format using the --forest option with ps:

    ps -ef --forest
    

    This shows the parent-child relationships between processes, which is useful for understanding how processes are spawned.

    Filtering with ps

    You can filter processes based on certain criteria using options like -p (for a specific PID) or -u (for a specific user).

    Example: View process for a specific PID:

    ps -p 12345
    

    Example: View processes for a specific user:

    ps -u username
    

    4. Other Useful Process Management Commands

    • top: Displays an interactive, real-time view of system processes, including resource usage (CPU, memory).

      top
      
    • htop: A more user-friendly, interactive version of top with additional features.

      htop
      
    • kill: Used to send signals to processes (e.g., terminate them).

      kill PID
      kill -9 PID  # Force kill
      
    • nice: Used to set process priority (CPU scheduling). A process with a lower priority will get less CPU time.

      nice -n 10 command
      
    • renice: Adjust the priority of a running process.

      renice -n 10 -p PID
      

    Summary of Key Commands:

    • Background process: Run with &.
    • Jobs: Use jobs, fg, bg to manage jobs.
    • Process status: Use ps, top, and htop to monitor processes.
    • Kill process: Use kill or kill -9 to terminate processes.
    • Managing priorities: Use nice and renice to manage process priorities.

    Mastering these process management tools will help you efficiently manage multiple tasks and optimize your system's performance in Bash.

  • Posted on

    Introduction

    Signals are used to interact between processes and can occur at anytime, typically they are kill signals however processes can opt to handle them programatically unless they are SIGKILL or SIGSTOP signals.

    List Of Available Signals

    Table of signals

    SIGNAL VALUE DEFAULT ACTION POSIX? MEANING
    SIGHUP 1 Terminate Yes Hangup detected on controlling terminal or death of controlling process
    SIGINT 2 Terminate Yes Interrupt from keyboard
    SIGQUIT 3 Core dump Yes Quit from keyboard
    SIGILL 4 Core dump Yes Illegal instruction
    SIGTRAP 5 Core dump No Trace/breakpoint trap for debugging
    SIGABTR SIGIOT 6 Core dump Yes Abnormal termination
    SIGBUS 7 Core dump Yes Bus error
    SIGFPE 8 Core dump Yes Floating point exception
    SIGKILL 9 Terminate Yes Kill signal (cannot be caught or ignored)
    SIGUSR1 10 Terminate Yes User-defined signal 1
    SIGSEGV 11 Core dump Yes Invalid memory reference
    SIGUSR2 12 Terminate Yes User-defined signal 2
    SIGPIPE 13 Terminate Yes Broken pipe: write to pipe with no readers
    SIGALRM 14 Terminate Yes Timer signal from alarm
    SIGTERM 15 Terminate Yes Process termination
    SIGSTKFLT 16 Terminate No Stack fault on math co-processor
    SIGCHLD 17 Ignore Yes Child stopped or terminated
    SIGCONT 18 Continue Yes Continue if stopped
    SIGSTOP 19 Stop Yes Stop process (can not be caught or ignored)
    SIGTSTP 20 Stop Yes Stop types at tty
    SIGTTIN 21 Stop Yes Background process requires tty input
    SIGTTOU 22 Stop Yes Background process requires tty output
    SIGURG 23 Ignore No Urgent condition on socket (4.2 BSD)
    SIGXCPU 24 Core dump Yes CPU time limit exceeded (4.2 BSD)
    SIGXFSZ 25 Core dump Yes File size limit exceeded (4.2 BSD)
    SIGVTALRM 26 Terminate No Virtual alarm clock (4.2 BSD)
    SIGPROF 27 Terminate No Profile alarm clock (4.2 BSD)
    SIGWINCH 28 Ignore No Window resize signal (4.3 BSD, Sun)
    SIGIO SIGPOLL 29 Terminate No I/O now possible (4.2 BSD) (System V)
    SIGPWR 30 Terminate No Power Failure (System V)
    SIGSYS SIGUNUSED 31 Terminate No Bad System Called. Unused signal