Запускается ли программа, запускаемая bash, в новом задании?

Да, это было связано с debian #939839 . Согласно совету для Debian #939401 , я установил устаревшие драйверы Debian 390x :

.

sudo apt install nvidia-legacy-390xx-driver

А затем перенастроил мою настройку GLX, чтобы использовать драйверы Nvidia 390x, а не драйверы Nvidia 430:

sudo update-glx --config nvidia

И это все исправило. Надеюсь, со временем драйверы 430 будут исправлены, и я смогу вернуться к ним.

-1
07.01.2021, 08:10
2 ответа

Да, это так. Вы можете вызвать его из своей оболочки, набрав bgпосле ^Z, и он продолжит работать под своим собственным PID.

0
18.03.2021, 22:37

Это зависит от того, что вы подразумеваете под «программой».

Во-первых, отрывок из видео вводит в заблуждение, когда говорится: «Этот сеанс начинается с одного задания , содержащего процесс оболочки. » Как поясняется в Что такое разница между работой и процессом? , а также, как следует из POSIX-определения задания , задания это концепция оболочки.Таким образом, запущенная оболочка сама по себе не является заданием, если только она не является частью задания из родительского процесса оболочки . В отрывке родительским процессом является терминал , который, как поясняется в The Bash Guide , представляет собой просто программу с графическим интерфейсом, используемую для запуска текстовых -интерфейсных программ, которые не не обязательно снаряды.

Вот несколько команд, иллюстрирующих, что таблица из Демистифицированный TTY является точной:

$ cat
hello
hello
^Z
[1]+  Stopped                 cat
$ cat | sort
^Z
$ jobs
[1]-  Stopped                 cat
[2]+  Stopped                 cat | sort

В последнем выводе видно, что существуют два задания:catи cat | sort, последнее эквивалентно ls | sortиз таблицы.

Что касается того, «запускается ли программа, запускаемая bash, в новом задании», POSIX определяет:

Job

A set of processes, comprising a shell pipeline, and any processes descended from it, that are all in the same process group.

Итак, если вы считаете, что «набор процессов, составляющих конвейер оболочки» — это работающая программа (, что вы можете сделать на основании того, что программа — это набор инструкций для выполнения ), тогда да.

Но поскольку "программа" является более общей концепцией, чем просто "конвейеры оболочки", то в целом неверно, что программы, запускаемые bash, запускаются в новом задании. Например, catи sortтакже являются программами, но каждая из них не запускается в отдельном задании.

Кроме того, встроенные функции оболочки являются "программами" в том смысле, что они являются "набором инструкций". Но они являются встроенными компонентами самой программы-оболочки, поэтому для их выполнения не обязательно создавать отдельные дочерние процессы. В тех случаях, когда они не выполняются в отдельных дочерних процессах, они не могут быть частью задания для оболочки.

0
13.11.2021, 13:49

Теги

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