Это диаграмма того, что происходит после входа ls
в bash и его выполнения:
первая часть показывает ситуацию до ls
исполнения.Башявляется дочерним процессом эмулятора терминалаxtermи у них та же аура, та же среда, что и вокруг них.ххзнаки указывают, что обаXtermиБаш, поскольку процессы «отец» и «сын» обладают идентичным набором переменных окружения.
во второй части показано, что происходит после запуска нового процесса, а именно ls.
- Bash порождает дочерний процесс, который является его точной копией, поэтому я назвал егоБаш_с(сокращение от Bash_copy).
- Затем,Баш_сзаменяется процессом ls.
Я думаю, что эта диаграмма проста, понятна, интуитивно понятна и недвусмысленна.
Однако я не нарисовал диаграмму для (ls)
, потому что не знаю, как она выглядит. У меня есть несколько различных сценариев того, как она может выглядеть, но здесь начинается часть вопроса: как будет (ls)
выглядеть диаграмма для ? пожалуйста, нарисуйте и прокомментируйте.
решение1
Иерархия процессов для (ls)
такая же, как и для ls
, то есть → bash → ls
, но если вы поместите список команд в скобки: (ls; ls)
, то bash запустит подоболочку и выполнит команды в этой подоболочке. Результирующая иерархия процессов выглядит так: → bash → bash → ls
(два процесса ls запускаются последовательно).
Вы можете визуализировать это, используя cat без аргументов вместо ls:. (cat; cat)
Первый процесс cat ожидает ввода, давая вам возможность увидеть, что происходит, используя pstree
или top
в другом терминале.