1

Я пытаюсь понять, как все эти вещи соединены вместе. Например, с помощью этого скрипта:

#!/bin/bash

. script1
./script2
. script3 &
./script4 &

sleep 5

Как выглядят PID? Что такое отдельный процесс, а что нет? Является ли фоновый процесс таким же, как подоболочка?

1 ответ1

1

. script1 - не отдельный процесс; script1 выполняется в текущей оболочке. см. help .

./script2 - как и при вызове любой внешней команды, разветвляется новый процесс и ожидает завершения

. script3 & - да, отдельный процесс. Пример:

$ cat script3
sleep 300
$ . script3 &
[1] 15136
$ echo $$
15102
$ ps -ef | grep $$
jackman  15102 32659  0 09:43 pts/0    00:00:00 bash
jackman  15136 15102  0 09:44 pts/0    00:00:00 bash
jackman  15157 15102  0 09:44 pts/0    00:00:00 ps -ef
jackman  15158 15102  0 09:44 pts/0    00:00:00 grep --color=auto 15102

Смотрите руководство по bash, Списки команд:

Если команда завершается оператором управления '&', оболочка выполняет команду асинхронно в подоболочке.

./script4 & - да, отдельный процесс.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .