Я включил seccomp через python-prctl в проекте. Я не могу понять, как выйти чисто - результат всегда убит.Как вы можете выйти из окна после включения seccomp в Python?
Я видел несколько примеров, которые используют ctypes или ffi, чтобы попытаться ссылаться на libc, но если я ожидаю их с WIFEXITED, у них тоже будет такая же проблема.
Пример кода ниже. Результат всегда «Мы были убиты до смерти».
def main():
pid = os.fork()
if not pid:
prctl.set_seccomp(True)
os.write(0, 'Hi\n')
# os._exit(0)
# _exit(0)
# sys._exit(0)
# return
# [email protected]#(*! What do?
endpid, status = os.waitpid(pid, 0)
print 'Child forked as %d and returned with %d' % (endpid, status)
if not os.WIFEXITED(status):
print 'Exitted abnormally'
if os.WIFSIGNALED:
if os.WTERMSIG(status) == signal.SIGKILL:
print 'We were killed to death'
else:
print 'Returned with %d' % (os.WEXITSTATUS(status))
Быстрое обновление, так как я забыл LibC материал:
Определение _Exit() выше ни с одной из них до сих пор в результате убийства.
# FFI Method
ffi = cffi.FFI()
# Use _exit, which avoids atexit(), etc
ffi.cdef('void _exit(int);')
libc = ffi.dlopen(None)
_exit = libc._exit
.... или ....
# ctypes method
libc = cdll.LoadLibrary('libc-2.18.so')
_exit = libc._exit
Спасибо за обмен знаниями tamarintech! Как объяснено [здесь] (http://stackoverflow.com/questions/33150281/seccomp-how-to-exit-success), ваш ответ подтвержден как правильный. – gsamaras