Разве подоболочка не создается, когда я запускаю команду `bash `?

Прошло несколько лет с тех пор, как я управлял кластером трущоб, но squeueдолжен дать вам то, что вы хотите. Попробуйте:

squeue --nodelist 92512 -o "%A %j %C %J"

(который должен предоставить ваш идентификатор задания, имя задания, процессор и потоки для ваших заданий на узле 92512)

Кстати, если вам не нужны сведения только об одном конкретном узле, возможно, вам лучше искать по идентификатору задания, а не по идентификатору узла.

Существует множество хороших сайтов с документацией по использованию slurm, доступных в Интернете, которые легко найти через Google -большинство университетов и т. д., использующих кластер высокопроизводительных вычислений, пишут свои собственные документы, справку и «шпаргалки» -, адаптированные к деталям их конкретного кластера (s )(, поэтому примите это во внимание и адаптируйте любые примеры к ВАШЕМУ кластеру ). Также есть хорошая общая документация по использованию slurmв https://slurm.schedmd.com/documentation.html

.

1
16.10.2020, 14:31
2 ответа

Нет, это не подоболочка. Подоболочки в bash помечаются с помощью переменной BASH_SUBSHELL. Это значение увеличивается на 1 для каждого уровня подоболочки :

.
$ echo $BASH_SUBSHELL 
0
$ ( echo $BASH_SUBSHELL )
1
$ ( ( echo $BASH_SUBSHELL ) )
2
$ ( ( ( echo $BASH_SUBSHELL ) ) )
3
$ ( ( ( ( echo $BASH_SUBSHELL ) ) ) )
4
$ ( ( ( ( ( echo $BASH_SUBSHELL ) ) ) ) )
5

Но эта переменная не изменится, если вы просто запустите другую оболочку:

$ echo $BASH_SUBSHELL 
0
$ bash
$ echo $BASH_SUBSHELL 
0

Это связано с тем, что когда вы запускаете новую оболочку bash, это полностью новый экземпляр. Да, экспортированные переменные будут унаследованы, потому что это дочерняя оболочка вашего исходного экземпляра bash, но, как вы можете видеть выше, на самом деле это не подоболочка. Обратите внимание, что подоболочки наследуют все переменные, а не только экспортированные :

.
$ foo=var
$ ( echo $BASH_SUBSHELL; echo $foo )
1
var
$ bash
$ echo $var ## <-- prints an empty line

Это также поясняется в COMMAND EXECUTION ENVIRONMENTизman bash(акцент мой):

Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a duplicate of the shell environment, except that traps caught by the shell are reset to the values that the shell inherited from its parent at invocation. Builtin commands that are invoked as part of a pipeline are also executed in a subshell environment. Changes made to the subshell environment cannot affect the shell's execution environment.

Таким образом, окружения подоболочек являются почти точными копиями своих родительских оболочек, включая все переменные, а не только экспортируемые.

2
18.03.2021, 22:56

Раздел среды выполнения команд руководства Bash:

When a simple command other than a builtin or shell function is to be executed, it is invoked in a separate execution environment that consists of the following. Unless otherwise noted, the values are inherited from the shell.

  • shell variables and functions marked for export, along with variables exported for the command, passed in the environment

Так:

  • bash, не являясь встроенной функцией или функцией оболочки, выполняется в подоболочке.

  • Он наследует переменные, помеченные для экспорта, из своей родительской оболочки.

  • Только когда valueэкспортируется, подоболочка bashполучает его, как показали ваши эксперименты.

Это не означает, что bashоболочка, которую вы получаете, является подоболочкой, но что она была выполнена из подоболочки, заменяя ее, так что задействованная подоболочка недолговечна -и только посредник.

См. схему ниже.

enter image description here

Диаграмма, сделанная с помощью Dia

Вы набираете bash, и это разветвляет текущую оболочку, создавая идентичную. Желтый брат ждет оранжевого, который execs bash. Это может случиться с любой не -встроенной командой (zsh, g++, firefox... ), не только bash. Все переменные окружения наследуются, но так как valueне из таких и не экспортировался, синий Баш его не получает.

Источники:

1
18.03.2021, 22:56

Теги

Похожие вопросы