Я написал программу на C ниже, которая использовала execv
для запуска команды оболочки и ptrace
для ее трассировки.
pid = fork();
if (pid == 0) {
// child process
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
char** argv = new char*[3];
argv[0] = "/usr/bin/python3.6";
argv[1] = "pythoncode.py";
argv[2] = NULL;
execv(argv[0], argv);
} else
{
// parent process
pid_t p = wait4(-1, &stat, __WALL, &rusage_);
...
}
Она может работать правильно, когда я использую ее для запуска нормального кода Python.Но сегодня я написал код на Python ниже
from selenium import webdriver
browser = webdriver.Chrome()
# do something
browser.close()
. Я могу успешно запустить его в оболочке или без ptrace
, но когда я использовал execv
и ptrace
одновременно, это всегда дает мнесигнал остановки и код сигнала были SIGILL
(незаконная инструкция).Кто-нибудь знает почему и как это решить?