LINUX.ORG.RU

Запуск процесса и Ctrl-C

 ,


1

1

Я запускаю gdb из скрипта на Python:

gdb = ctx.get_param("TOOLCHAIN_PREFIX") + "gdb"
st_util = ctx.get_param("ST_UTIL_EXECUTABLE")
elf_name = ctx.get_param("EXECUTABLE_NAME")
st_util_process = subprocess.Popen([st_util])
subprocess.call([gdb, "-ex", "target remote :4242", elf_name])

Всё работает, но если внутри GDB нажать Ctrl-C, то комбинацию клавиш обработает не GDB, а Python, что проявится в виде завершения скрипта (вместе с GDB, разумеется).

Как можно запустить GDB из Python таким образом, чтобы Ctrl-C работал также как если запустить GDB обычным образом?

★★★★★

Ответ на: комментарий от i-rinat

Сработал такой вариант:

signal.signal(signal.SIGINT, signal.SIG_IGN)
subprocess.call([gdb, "-ex", "target remote :4242", elf_name])

Вариант же:

def preexec_function():
	signal.signal(signal.SIGINT, signal.SIG_IGN)
subprocess.call([gdb, "-ex", "target remote :4242", elf_name], preexec_fn=preexec_function)

почему-то не работает...

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

почему-то не работает...

Наискосок я доки смотрел, проглядел. Сейчас ещё раз глянул — там этот параметр только для subprocess.Popen, для call ничего такого нет.

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

i-rinat ★★★★★
()

если внутри GDB нажать Ctrl-C, то комбинацию клавиш обработает не GDB, а Python

Вангую, что терминал посылает сигнал всей группе процессов с ним связанных.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Так и есть

Signals generated by typing the corresponding character on some tty are sent to all processes that are in the foreground process group of the session that has that tty as controlling tty

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Дополнительная проблема: Ctrl-C получает второй процесс, который я запускаю - st-util. И в отличии от GDB, он при его получении безусловно завершается. В общем, надо как-то сделать так, чтобы st-util ушёл в фон и Ctrl-C не получал совсем.

KivApple ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.