I can't understand why fork () works that way. Here is an excerpt from the book "Modern OS" Tanenbaum
In UNIX, there is only one system call for creating a new process - fork. This call creates an exact copy of the calling process. After the fork system call is executed, the two processes, the parent and child, have a single memory image, single configuration description lines and the same open files. And nothing more. Usually, after this, the child process changes the memory image and starts a new program, executing an execve system call or similar. For example, when a user types a sort command in a shell, the shell creates a branching child process in which the sort command is executed. The purpose of this two-step process is to allow a child process to manage its file descriptors after branching, but before execve, to redirect the standard input, standard output, and standard error message output.
I do not understand why if we call the sort command, you cannot just execute the sort () program, but you need to create a copy of this program.