[Exec parsing in 100]shell

Source: Internet
Author: User

Reference: Linux commands, editor and Shell programming, advanced Programming for UNIX environments

Reference

The bash shell commands are divided into two categories: external commands and internal commands.
    内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec,source等等。    外部命令是通过系统调用或独立的程序实现的,如sed、awk等。

Set: The command functions primarily to display shell variables that already exist in the system, and to set new variable values for shell variables.
ENV: Environment variables

Fork: Complete Linux system call

Fork is a system call for Linux that is used to create a subprocess (child process).
A child process is a copy of the parent process that obtains a certain resource allocation from the parent process and the environment that inherits the parent process.
The only difference between a child process and the parent process is the PID (process ID).

The essential difference between local variables and environment variables

Environment variables (variables passed to child processes, hereditary is the fundamental difference between local variables and environment variables) can only be passed from the parent process to the child process in one direction. Regardless of how the environment variable of the child process changes, the environment variables of the parent process are not affected.

2 ways to execute the shell

Shell script:
There are two ways to execute shell scripts,
One is to create a new shell, and then execute the corresponding shell scripts; execute the script.
One is executed under the current shell and no more shells are enabled. The source command executes.

The new way to create a shell and then execute scripts is to add the following statement at the beginning of the scripts file

#!/bin/sh

The usual script file (. sh) is this usage. This method first enables the new Sub-shell (the new child process) and then executes the command under it.

Another way to do this is by the source command, which no longer produces a new shell, but executes all commands under the current shell.

Source
The source command is the point (.) Command.

Enter man source under Bash, find the source command explanation, and you can see the explanation "Read and execute commands from filename in the current shell environment and ...". As you can tell, the source command executes each command in the parameter file in the current process, not the other driver process (or Sub-shell).

Exec:
Enter man exec under bash and find the EXEC command interpreter where you can see "No new process is created." Such an explanation, which means that the EXEC command does not produce new sub-processes. So what's the difference between exec and source?

The EXEC command closes the current shell process when it executes, and then switches to the subsequent command to continue execution.

1. The system calls exec to replace the original process with a new process, but the PID of the process remains the same. Therefore, it can be argued that the exec system call did not create a new process, but instead replaced the contents of the original process context. The code snippet, data segment, and stack segment of the original process are replaced by the new process.

A process consists mainly of the following aspects:

2. Exec is a function cluster, consisting of 6 functions, which begin with excl and EXECV.

Executes the exec system call, which is generally the case with the fork () function to create a new process and then let the process execute the EXEC call. We know that after the fork () establishes a new process, the parent will share the code snippet with the child process, but the data space is separate, but the parent process can copy the contents of the data space into the child process, and the context will be copied to the child process. In order to improve efficiency, adopt a copy-on-write strategy, that is, when creating a child process, does not copy the address space of the parent process, the father-child process has a common address space, only when the child process needs to write data (such as to the buffer to write data), this time will copy the address space, copy the buffer into the child Thus, the parent-child process has an independent address space. After executing exec for fork (), this strategy can improve the efficiency, if copy at the beginning, then after exec, the child process data will be discarded and replaced by the new process.

3. The difference between exec and system

(1) Exec is directly with the new process to replace the original program run, after the completion of the operation is not back to the original program.

(2) system is called by the Shell to execute your command, system=fork+exec+waitpid, after execution, go back to the original program. Continue with the following section.

In short, if you call with Exec, you should first fork a new process and then exec. The system does not need you to fork the new process, has been encapsulated.

[Exec parsing in 100]shell

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.