У меня сработало установить метод ускорения моего драйвера Intel на uxa
.
Создав /etc/X11/xorg.conf.d/20-intel.conf
С содержанием:
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "uxa"
EndSection
Я получил это из здесь . Это вызывало сбои в моем VirtualBox, но также и в моем Firefox.
Вы также можете проверить это . Может быть, это относится к вам.
ЗАМЕЧАНИЕ:Чтобы получить хорошее руководство по управлению заданиями в Unix, я бы направил вас на страницу Википедии по теме-Управление заданиями (Unix).
Фразу «присоединен к терминалу» обычно можно услышать, говоря о заданиях в контексте оболочки. Но у него есть и другие значения. Фраза «присоединить процесс к терминалу» также может означать использование инструмента, такого как gdb
, strace
или lsof
, для присоединения к определенному идентификатору процесса (PID )и вывода информации или ее мониторинга.
Я расскажу об обоих, но для начала расскажу об очередях заданий, так как подозреваю, что это то, что вы ищете.
В Unix, как и в операционных системах, обычно используется концепция заданий. В большинстве Unix-подобных операционных систем, которые я использовал, все они обычно работают одинаково. То есть они могут быть фоновыми и им может быть присвоен номер в очереди (очереди заданий ), и на них можно воздействовать из контекста их номера в этой очереди заданий.
Чтобы поместить что-то в очередь заданий, они обычно называют это действие фоновым. Когда вы возобновляете работу, которая была переведена в фоновый режим, вы называете это приоритетным. Обычно для этого используются команды bg
и fg
. Вы также можете сразу переводить задания в фоновый режим, используя амперсанд &
в конце любой выполняемой вами команды.
$ sleep 2 &
[1] 19189
Здесь я запускаю команду сна на 2 секунды и запускаю ее в фоновом режиме.Вывод немедленно дает вам полезную информацию, такую как номер очереди заданий([1]
)и идентификатор процесса фонового задания, 19189.
Когда это задание в конечном итоге завершится, оно напечатает сообщение этого типа в терминале, с которого оно было запущено:
$
[1]+ Done sleep 2
Для работы с фоновыми заданиями:
$ sleep 20 &
[1] 19207
$ fg
sleep 20
^C
Здесь я отправил задание на задний план (&
), затем вернул его на передний план (fg
), а затем уничтожил с помощью команды Ctrl + C (^C
).
Если бы у нас было несколько фоновых заданий:
$ sleep 20 &
[1] 19224
$ sleep 20 &
[2] 19225
$ sleep 20 &
[3] 19226
$ jobs
[1] Running sleep 20 &
[2]- Running sleep 20 &
[3]+ Running sleep 20 &
Их можно увидеть с помощью команды jobs
. Обратите внимание на маленькие +
и -
рядом с #3 и #2. Если я запущу команду fg
без указания номера очереди заданий, я получу последнее задание, которое было помещено в задание. очередь(+
). Например:
$ fg
sleep 20
^C
$ jobs
[1]- Running sleep 20 &
[2]+ Running sleep 20 &
Вы можете использовать номера очереди заданий для обработки заданий. Один из таких способов — убить их. Чтобы сослаться на номер очереди заданий, вы добавляете к ним префикс %
, если вы хотите сослаться на них с помощью других команд, таких как kill
. Можно конечно kill
несколько сразу или только один:
$ kill %3 %4 %5
$ jobs
[3] Terminated sleep 20
[4] Terminated sleep 20
[5]- Terminated sleep 20
[6]+ Running sleep 20 &
Присоединение процесса к терминалу также может означать следующее. Вот PID моей оболочки:
$ echo $$
23543
В другой оболочке я запускаю strace
и подключаюсь к этому процессу, чтобы посмотреть, какие системные вызовы он делает:
$ strace -p 23543
strace: Process 23543 attached
read(0,
ПРИМЕЧАНИЕ.:Здесь видно, что он ожидает команды в read
. Это то, что делают терминалы/оболочки.
Здесь мы видим, что я начал вводить команду ls
внутри нее, и оболочка повторяет этот отказ в оболочке в виде системных вызовов write()
.
read(0, "l", 1) = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "l", 1) = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, "s", 1) = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "s", 1) = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0,
Это еще одна форма присоединения процесса к терминалу.
Здесь также можно предположить одну из наиболее неясных ссылок на присоединение процесса к терминалу. Этот вопрос и ответ U&L под названием:Как подключить терминал к отдельному процессу? охватывает его во всех его формах.
Основная предпосылка этой формы ссылки заключается в том, что вы взяли фоновое задание и «отключили» его от текущей оболочки. Вы делаете это с помощью команд nohup
или disown
.
После того, как процесс был отклонен, вы больше не можете использовать команды jobs
, fg
или bg
для воздействия на него. Он больше не связан с PID вашей текущей оболочки.
Традиционным методом повторного -получения ранее отвергнутого процесса является использование такого инструмента, как reptyr
, который повторно -прикрепит PID к вашей существующей оболочке. Например, скажем, мы запускаем 2 задания и nohup
их:
$ nohup sleep 200 &
[1] 19720
$ nohup sleep 200 &
[2] 19721
Все еще подключены к очереди заданий нашего терминала, давайте disown
их:
$ jobs
[1]- Running nohup sleep 200 &
[2]+ Running nohup sleep 200 &
$ disown -a
Теперь их нет:
$ jobs
$
Они по-прежнему указаны как дочерние PID нашей исходной оболочки (23543):
$ ps -eaf|grep -E "19720|19721"
vagrant 19720 23543 0 18:29 pts/1 00:00:00 sleep 200
vagrant 19721 23543 0 18:29 pts/1 00:00:00 sleep 200
Теперь, если мы выйдем и снова войдем в систему, мы увидим, что эти процессы теперь перечислены как родительские для основного PID, 1:
$ ps -eaf|grep -E "19720|19721"
vagrant 19720 1 0 18:29 ? 00:00:00 sleep 200
vagrant 19721 1 0 18:29 ? 00:00:00 sleep 200
Эти процессы смогли сделать это, потому что мы nohup
редактировали их и disown
редактировали их. Давайте снова прикрепим один из них:
$ reptyr -s 19720
[-] Timed out waiting for child stop.
^C
ПРИМЕЧАНИЕ.:В приведенном выше примере я снова подключил PID 19720 к своей оболочке, а затем убил его с помощью Ctrl + C . Мы видим, что его больше нет:
$ ps -eaf|grep -E "19720|19721"
vagrant 19721 1 0 18:29 ? 00:00:00 sleep 200