There are two ways of doing this:
1. Command &: Background run, you shut down the terminal will stop running
2. Nohup Command &: Run in the background, you will continue to run the terminal
First, Introduction
Linux/unix the biggest advantage of the Microsoft platform is the real multi-user, multi-tasking. Therefore, in the task management also has the characteristic management thought.
We know that on Windows, we either have a program running in the background as a service or stop the service. Instead of allowing the program to switch between foreground and background. Linux provides FG and BG commands that allow you to easily schedule tasks that are running. Suppose you find that a program running in the foreground takes a long time, but you need to do something else, you can hang up the program with Ctrl-z, and then you can see the system prompt:
[1]+ stopped/root/bin/rsync.sh
Then we can schedule the program to execute in the background: (the number behind BG is the job number)
#bg 1
[1]+/root/bin/rsync.sh &
Use the Jobs command to view the tasks that are running:
#jobs
[1]+ running/root/bin/rsync.sh &
If you want to bring it back to the foreground, you can use
#fg 1
/root/bin/rsync.sh
This way, you can only wait for the task to complete on the console.
& Throw instructions into the background to execute
[Ctrl]+z pauses the foreground task in the background
Jobs View the working status of the background
FG%jobnumber The backstage task to the front desk for processing.
BG%jobnumber put tasks in the background to handle
Kill management tasks in the background
Second, &
In Linux, when a job is run in the foreground, the terminal is occupied by the job, and when the job is run in the background, it does not occupy the terminal. You can use the & command to place jobs in the background. In fact, this is where the command is put into a job queue:
$./test.sh &
[1] 17208
$ jobs-l
[1]+ 17208 Running./test.sh &
Be careful when running a job in the background: commands that require user interaction are not executed in the background, because your machine will be there to wait. However, a job running in the background will output the results to the screen, interfering with your work. If a job that runs in the background produces a lot of output, it's a good idea to redirect its output to a file using the following method:
Command >out.file 2>&1 &
In the example above, 2>&1 indicates that all standard output and error outputs will be redirected to a file called Out.file. When you successfully submit a process, a process number is displayed, which can be used to monitor the process, or to kill it.
Example: Look for a file named "httpd.conf" and redirect all standard output and error output to the Find.dt file:
# find/etc/httpd/-name "httpd.conf"-print >find.dt 2>&1 &
[2] 7832
After the command is successfully submitted, the system gives its process number 7832. For a command that has already been executed in the foreground, it can be re-placed in the background, first by pressing CTRL + Z to pause the process that is already running, and then using the BG command to put the stopped job in the background, for example, by using CTRL + Z to suspend the tesh.sh that is executing in the foreground:
$./test.sh
[1]+ Stopped./test.sh
$ bg%1
[1]+./test.sh &
$ jobs-l
[1]+ 22794 Running./test.sh &
However, if the process is executed above the background, its parent process is still the process of the current terminal shell, and once the parent process exits, the hangup signal is sent to all child processes, and the child process will exit after receiving hangup. If we are going to continue running the process while exiting the shell, we need to use nohup to ignore the hangup signal, or SETSID to set the parent process to the INIT process (process number 1)
$ echo $$
21734
$ nohup./test.sh &
[1] 29016
$ PS-EF | grep test
515 29710 21734 0 11:47 pts/12 00:00:00/bin/sh./test.sh
515 29713 21734 0 11:47 pts/12 00:00:00 grep test
$ setsid./test.sh &
[1] 409
$ PS-EF | grep test
515 410 1 0 11:49? 00:00:00/bin/sh./test.sh
515 413 21734 0 11:49 pts/12 00:00:00 grep test
The above experiment demonstrates the use of Nohup/setsid plus & to make the process run in the background without being affected by the current shell exit. So what do you do with processes that are already running in the background? You can use the Disown command:
$./test.sh &
[1] 2539
$ jobs-l
[1]+ 2539 Running./test.sh &
$ disown-h%1
$ PS-EF | grep test
515 410 1 0 11:49? 00:00:00/bin/sh./test.sh
515 2542 21734 0 11:52 pts/12 00:00:00 grep test
There is also a way, even if the process is executed in a subshell, in fact, this is similar to Setsid. The method is simple, enclose the command in parentheses ():
$ (./test.sh &)
$ PS-EF | grep test
515 410 1 0 11:49? 00:00:00/bin/sh./test.sh
515 12483 21734 0 11:59 pts/12 00:00:00 grep test
Note: The test environment for this article is red Hat Enterprise Linux as Release 4 (Nahant Update 5), Shell is/bin/bash, different OS and Shell may command somewhat differently. For example, Aix ksh, there is no disown, but you can use the Nohup-p PID to achieve disown the same effect.
There is also a more powerful way is to use screen, first create a disconnected mode of the virtual terminal, and then use the-r option to reconnect the virtual terminal, in which the execution of any command, can achieve the effect of nohup, which is more convenient when there are multiple commands in the background continuous execution:
$ SCREEN-DMS Screen_test
$ screen-list
There is a screens on:
27963.screen_test (Detached)
1 Socket In/tmp/uscreens/s-jiangfeng.
$ screen-r Screen_test
Third, Nohup
If you are running a process and you feel that the process will not end when you exit the account, you can use the Nohup command. This command can continue to run the appropriate process after you exit the account. Nohup is the meaning of not hanging (no hang up). The general form of the command is:
Nohup Conmmand &
If you submit a job using the Nohup command, all output from the job is redirected to a file named Nohup.out by default, unless the output file is specified separately:
Nohup Command > Myout.file 2>&1
In the example above, the output is redirected to the Myout.file file.
iv.. *,? ,[...],[!...] Wait
Here are the special characters:
* matches any string in the file name, including an empty string.
? Matches any single character in the file name.
[...] Matches any of the characters contained in [].
[!...] Match [] Non-exclamation! The character after.
When S H e L encounters the above characters, they are treated as special characters rather than ordinary characters in the file name, so that the user can use them to match the corresponding file name.
1) List file names starting with I or O: #ls [io]*
2) List the log. Start, followed by a number, and then can be any string file name: #ls log. [0-9]*
3) In contrast to example two, list log. Start, followed by a number, and can then be any string file name: #ls log. [!0-9]*
4) List all the filenames that begin with LPs, which can be any two characters, and end with 1: #ls LPs?? 1
5) List all filenames that begin with a capital letter: $ ls [a-z]* 6] Lists all the. The file name at the beginning (an implied file, for example. Profile,. rhosts,. Histo ry, etc.): $ ls. *
jobs: See how many commands are currently running in the background
FG: The command in the background is moved to the foreground to continue running. If there are multiple commands in the background, you can use FG%jobnumber to bring up the selected command,%jobnumber is the ordinal (not PID) of the command being executed in the background through the jobs command.
BG: A command that pauses in the background changes to continue execution. If there are multiple commands in the background, you can use BG%jobnumber to bring up the selected command,%jobnumber is the ordinal (not PID) of the command being executed in the background through the jobs command.
Killing a program that has already started is the same as the normal way:
- Pkill-9 Name
- Killall Name
- Kill PID
- ...
Linux Command background run