[Linux Command Explanation Encyclopedia] 088. In-depth understanding of trap commands in shell scripts

trap

Capture signals and other events and execute commands.

overview

trap [-lp] [[arg] signal_spec ...]

The main purpose

Used to specify the action to be taken when a signal is received.
Perform cleanup work when the script is interrupted.

options

  • -l: Print the signal name and the number corresponding to the signal name.
  • -p: Displays the trap command associated with each signal.

parameter

  • arg: The command to be executed when the signal is received.
  • signal_spec: The signal name or the number corresponding to the signal name.

return value

Returns 0 if the expression execution result is successful, and returns 1 when the parameter signal_spec does not specify a valid value.

About signals

Signal is an inter-process communication mechanism that provides an asynchronous software interrupt to the application program, giving the application program the opportunity to accept commands (i.e. signals) sent by other programs or terminals. After the application receives the signal, there are three ways to handle it: ignore, default, or catch. After a process receives a signal, it checks the handling mechanism for the signal. If it is SIG_IGN, the signal will be ignored; if it is SIG_DFT, the system's default processing action will be adopted, usually terminating the process or ignoring the signal; if a processing function (capture) is specified for the signal, the current process will be interrupted. The task being executed is turned to execute the signal processing function, and then the interrupted task is continued after returning.

In some cases, we do not want our shell script to be interrupted while running. For example, if we write a shell script and set it as the default shell for a certain user, the user can only do a certain job after entering the system, such as For database backup, we don't want users to use methods such as Ctrl+C to enter the shell state and do things we don't want to do. This uses signal processing.

Here are some common signs you may encounter:

Signal name Number of signals describe
SIGHUP 1 This signal is issued when the user terminal connection (normal or abnormal) ends, usually when the terminal's control process ends, to notify various jobs in the same session. At this time, they are no longer associated with the controlling terminal. When logging in to Linux, the system will assign a terminal (Session) to the logged-in user. All programs running in this terminal, including the foreground process group and background process group, generally belong to this Session. When the user logs out of Linux, the foreground process group and the background process that outputs to the terminal will receive the SIGHUP signal. The default action of this signal is to terminate the process, so the foreground process group and the process with terminal output in the background will be terminated. For daemons that are disconnected from the terminal, this signal is used to notify it to re-read the configuration file.
SIGINT 2 Program termination (interrupt) signal, issued when the user types Ctrl+C.
FOLLOWS 3 Similar to SIGINT, but controlled by the QUIT character (usually Ctrl /). The core file is generated when the process exits due to receiving SIGQUIT, which is similar to a program error signal in this sense.
SIGFPE 8 Emitted when a fatal arithmetic error occurs. Including not only floating-point arithmetic errors, but also all other arithmetic errors such as overflow and division by 0.
SIGKILL 9 Used to end the program immediately. This signal cannot be blocked, processed or ignored.
SIGALRM 14 A clock timing signal that calculates actual time or clock time. The alarm function uses this signal.
TARGET TERM 15 The program ends (terminate) signal, which is different from SIGKILL in that this signal can be blocked and processed. Usually used to require a program to exit normally by itself; the kill command generates this signal by default.

example

When the shell receives commands such as HUP, INT, PIPE, QUIT, TERM, the currently executing program will be executed exit 1.

trap "exit 1" HUP INT PIPE QUIT TERM

Clean temporary files

Here's how to delete the file and then exit if someone tries to kill the program from the terminal:

trap "rm -f $WORKDIR/work1 $WORKDIR/dataout; exit" 2

Execute the shell program. If the program receives a signal of 2, then these two files (work1 and dataout) will be automatically deleted.

ignore signal

If the command listed in the trap is empty, the specified signal will be ignored when received:

trap '' 2

Ignore multiple signals:

trap '' 1 2 3 15

reset trap

When you change the action to take when a signal is received, you can omit the first parameter to reset to the default behavior.

trap 1 2

Learn from scratchpython

[Learn python from scratch] 92. Use Python’s requests library to send HTTP requests and process responses
[Learn python from scratch] 91. Use decorators and dictionaries to manage request paths in a simple web application
[Learn python from scratch] 93. Use dictionary management Request path
[Learn python from scratch] 89. Use WSGI to build a simple and efficient Web server
[Learn python from scratch] 88. Detailed explanation of WSGI interface: realize simple and efficient web development
[Learn python from scratch] 87. Manually build an HTTP server in Python Implementation and multi-threaded concurrent processing
[Learn python from scratch] 86. In-depth understanding of the HTTP protocol and its role in browser and server communication
[Learn python from scratch] 85. Application of parallel computing technology in Python process pool
[Learn python from scratch] ] 84. In-depth understanding of threads and processes
[Learn python from scratch] 83. Python multi-process programming and the use of process pools
[Learn python from scratch] 82. Chat program implementation based on multi-threading
[Learn python from scratch] 81. Python more Application of thread communication and queue
[Learn python from scratch] 80. Thread access to global variables and thread safety issues
[Learn python from scratch] 79. Thread access to global variables and thread safety issues
[Learn python from scratch] 78. File download case
[ Learn python from scratch] 77. TCP server programming and precautions
[learn python from scratch] 76. Server and client: key components of network communication
[learn python from scratch] 75. TCP protocol: reliable connection-oriented transmission layer communication protocol
[Learn python from scratch] 74. UDP network program: Detailed explanation of port issues and binding information
[Learn python from scratch] 73. UDP network program - sending data
[Learn python from scratch] 72. In-depth understanding of Socket communication and creation of sockets Method
[Learn python from scratch] 71. Network ports and their functions
[Learn python from scratch] 70. Network communication methods and their applications: from direct communication to routers to connect multiple networks
[Learn python from scratch] 69. Network communication and IP address classification analysis
[Learn python from scratch] 68. Greedy and non-greedy modes in Python regular expressions
[Learn python from scratch] 67. The re module in Python: regular replacement and advanced matching technology
[Learn python from scratch] 66 .In-depth understanding of regular expressions: a powerful tool for pattern matching and text processing
[Learn python from scratch] 65. Detailed explanation of Python regular expression modifiers and their applications
[Learn python from scratch] 64. The re.compile method in Python regular expressions Detailed explanation of usage
[Learn python from scratch] 63. Introduction to the re.Match class and its attributes and methods in regular expressions
[Learn python from scratch] 62. Python regular expressions: a powerful string matching tool
[Learn python from scratch] 61. Detailed explanation and application examples of property attributes in Python
[Learn python from scratch] 60. Exploration generator: a flexible tool for iteration
[Learn python from scratch] 59. Iterator: An efficient tool for optimizing data traversal
[Learn python from scratch] 58. Custom exceptions in Python and methods of raising exceptions
[Learn python from scratch] 57. Use the with keyword in Python to correctly close resources
[Learn python from scratch] 56. The importance and application of exception handling in programming
[Learn python from scratch] 55. Serialization and sum in Python Deserialization, application of JSON and pickle modules
[Learn python from scratch] 54. Writing data in memory
[Learn python from scratch] 53. CSV files and Python’s CSV module
[Learn python from scratch] 52. Reading and writing files - Python file operation guide
[Learn python from scratch] 51. Opening and closing files and their applications in Python
[Learn python from scratch] 49. Object-related built-in functions in Python and their usage
[Learn python from scratch] 48 .Detailed explanation of inheritance and multiple inheritance in Python
[Learn python from scratch] 47. The concept and basic use of inheritance in object-oriented programming
[Learn python from scratch] 46. Analysis of __new__ and __init__ methods and singletons in Python Design Patterns
[Learn python from scratch] 45. Class methods and static methods in Python
[Learn python from scratch] 44. Private properties and methods in object-oriented programming
[Learn python from scratch] 43. Examples in Python object-oriented programming Properties and class attributes
[Learn python from scratch] 42. Built-in properties and methods in Python
[Learn python from scratch] 41. python magic method (2)
[Learn python from scratch] 40. python magic method (1)
[Learn python from scratch] 39. Basic object-oriented syntax and application examples
[Learn python from scratch] 38. How to use and import Python packages
[Learn python from scratch] 37. The use and precautions of Python custom modules
[Learn python from scratch] Learn python] 36. Methods and techniques of using pip for third-party package management in Python
[Learn python from scratch] 35. Common Python system modules and their usage
[Learn python from scratch] 34. Detailed explanation of the import and use of Python modules
[ Learn python from scratch] 33. The role of decorators (2)
[Learn python from scratch] 32. The role of decorators (1)
[Learn python from scratch] 31. In-depth understanding of higher-order functions and closures in Python
[From Learn python from scratch】30. In-depth understanding of recursive functions and anonymous functions
【learn python from scratch】29. "Detailed explanation of function parameters" - understand the different uses of Python function parameters
【learn python from scratch】28. Local variables and global variables in Python Variables
[Learn python from scratch] 27. The use of Python functions and nested calls
[Learn python from scratch] 25. Functions: a tool to improve the efficiency of code writing
[Learn python from scratch] 24. String operations and traversal methods in Python
[Learn python from scratch] 23. How to use sets (set) and common operations in Python
[Learn python from scratch] 22. Add, delete, modify, and query dictionary variables in Python
[Learn python from scratch] 21. Python tuples and dictionaries
[Learn python from scratch] 20. Python list operation skills and examples
[Learn python from scratch] 19. Applications of looping through lists and list nesting
[Learn python from scratch] 18. Detailed explanation of the basic operations of Python lists (1)
[From Learning python from scratch】 17. The format method of Python strings (2)
【Learning python from scratch】 16. The format method of Python strings (1)
【Learning python from scratch】 15. In-depth understanding of strings and character set encoding
【From Learning python from scratch】14. Common operations on Python strings (2)
【Learning python from scratch】13. Common operations on Python strings (1)
【Learning python from scratch】12. Python string operations and applications
【Learning python from scratch】 11. Python loop statements and control flow
[Learn python from scratch] 10. Detailed explanation of Python conditional statements and if nesting
[Learn python from scratch] 09. Conditional judgment statements in Python
[Learn python from scratch] 08. Python understands bit operations operator, operator priority
[Learn python from scratch] 07. Detailed explanation of Python operators: assignment, comparison and logical operators
[Learn python from scratch] 06. Use arithmetic operators in Python for calculations and string concatenation
[Learn from scratch] python ] 05. Output and input in Python
[Learn python from scratch] 04. Basics of Python programming: variables, data types and identifiers
[Learn python from scratch] 03. Python interactive programming and detailed explanation of comments
[Learn python from scratch] 02. Introduction to development tools
[Learn python from scratch] 01. Install and configure python

Guess you like

Origin blog.csdn.net/qq_33681891/article/details/132755281