프로세스가 프로세스 외부에서 포크 시스템 호출을 수행하도록 강제할 수 있나요?

프로세스가 프로세스 외부에서 포크 시스템 호출을 수행하도록 강제할 수 있나요?

사용자 입력을 기다리는 프로그램이 있다고 가정해 보겠습니다. 사용자 입력이 "A"이면 프로그램은 상태 s_a로 들어가고, 사용자 입력이 "B"이면 프로그램은 상태 s_b로 들어갑니다. 어떤 상태가 필요한지 모르므로 두 입력을 모두 시도하고 싶습니다. 그래서 나는 이 프로그램을 분기하여 상위 프로세스에 "A"를 입력하고 하위 프로세스에 "B"를 입력할 수 있기를 원합니다. 이것이 리눅스에서 달성될 수 있습니까?

그래서 나는 명령과 같은 것을 원합니다

$ sudo make_that_process_call_fork_syscall PID

초당 여러 번 이 작업을 수행하므로 단순히 프로그램을 다시 시작하는 것은 매우 비효율적입니다. (이 프로그램은 Coq 정리 증명 보조 프로그램입니다.)

답변1

fork아니요. 프로그래밍되지 않은 경우 프로그램이나 기타 임의의 시스템 호출을 실행할 수 없습니다 . 일반적으로 프로세스는 정의된 API(예: ptrace)를 통하는 경우를 제외하고 다른 프로세스가 임의 코드를 실행하도록 허용되지 않습니다. 이를 허용하면 fork.

아마도 당신이 시도할 수 있는 최선의 방법은 이 시점에서 프로세스에 연결하고 예상되는 프롬프트가 나타날 때 수동으로 호출하는 것입니다 gdb. fork그러나 이는 프로그램에 의도하지 않은 결과를 초래할 수 있으며 일반적으로 좋은 생각이 아닙니다. 동일한 프로세스의 여러 복사본을 실행하려고 하므로 이는 확장 가능한 접근 방식이 아니며 다른 것을 시도하는 것이 더 나을 것입니다.

관련 정보