Как запрос на заказ Установлен RPM пакет

(Это попытка прояснить и ответить на вопрос, но улучшения и исправления приветствуются).

Во-первых, давайте удалим sudo и &+ fg из сценария - поскольку они не влияют на работу станции (я предположил, что вы использовали их в основном для получения PID). Тогда возникает вопрос: 1) как процесс, запущенный на переднем плане терминала, получает SIGINT; 2) что меняется, когда терминал является псевдотерминалом, использующим X11 (например, Xterm).

  1. Доставка SIGINT (и SIGQUIT, SIGTSTP) генерируется управляющим драйвером терминала ядра, когда он перехватывает символ CTRL-C, вот почему вы видите SI_KERNEL в качестве источника. Это происходит независимо от X11 или псевдотерминалов. Это хорошо показано в книге "Advanced Programming in the Unix Environment 2nd Edition (APUE2)", рисунок 9.7, страница 272 (я не буду вставлять его сюда из соображений авторского права, но уверен, что его можно найти). Более подробное объяснение дано на странице 275, раздел "9.8 Управление заданиями". Соответствующий код ядра Linux, вероятно, следующий: http://lingrok.org/xref/linux-linus/drivers/tty/n_tty.c#1254

  2. Теперь добавим псевдотерминалы: код ядра psudeo-терминала по-прежнему использует стандартный код терминала (упомянутый выше) - таким образом, когда "ведущая" сторона PTY (X-терминал) получает X11 key-event "CTRL-C" и посылает его ведомому PTY, символ обнаруживается приводом терминала ядра, и он посылает SIGINT группе процессов переднего плана (sudo в вашем случае). Это показано в APUE2, рисунок 19.1 страница 676.

В APUE2 на странице 706 есть небольшой параграф "Генерация сигналов", в котором упоминается, что сигналы могут посылаться непосредственно ведущим PTY с помощью ioctl(2) (например, http://lingrok.org/xref/linux-linus/drivers/tty/pty.c#482), однако я считаю, что это не тот случай.

Комментарии приветствуются.

1
23.10.2018, 23:00
2 ответа

Посмотрев ваши комментарии, вы можете попробовать:

rpm -qi --root=/opt atop

Когда вы используете флаг --installrootдля yum, он использует или создает новую базу данных rpmв этом расположении. Когда вы запускаете rpmбез флага --root, он будет смотреть на базу данных по умолчанию rpmв /var/lib/rpm, которая ничего не знает о вашей пользовательской установке пакета.

2
27.01.2020, 23:31

Этот вопрос похож на ваш. Если у вас есть файл rpm, проверьте

rpm -qp /path/to/your/package.rpm

, чтобы узнать, имеет ли пакет имя, отличное от файла rpm.

0
27.01.2020, 23:31

Теги

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