4

プロジェクトで python-prctl を介して seccomp を有効にしました。きれいに終了する方法がよくわかりません。結果は常に kill です。

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
#    ?!@#(*!  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() をこれらのいずれかで定義すると、依然として kill が発生します。

# 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
4

1 に答える 1