사용자 입력을 기다리는 프로그램이 있다고 가정해 보겠습니다. 사용자 입력이 "A"이면 프로그램은 상태 s_a로 들어가고, 사용자 입력이 "B"이면 프로그램은 상태 s_b로 들어갑니다. 어떤 상태가 필요한지 모르므로 두 입력을 모두 시도하고 싶습니다. 그래서 나는 이 프로그램을 분기하여 상위 프로세스에 "A"를 입력하고 하위 프로세스에 "B"를 입력할 수 있기를 원합니다. 이것이 리눅스에서 달성될 수 있습니까?
그래서 나는 명령과 같은 것을 원합니다
$ sudo make_that_process_call_fork_syscall PID
초당 여러 번 이 작업을 수행하므로 단순히 프로그램을 다시 시작하는 것은 매우 비효율적입니다. (이 프로그램은 Coq 정리 증명 보조 프로그램입니다.)
답변1
fork
아니요. 프로그래밍되지 않은 경우 프로그램이나 기타 임의의 시스템 호출을 실행할 수 없습니다 . 일반적으로 프로세스는 정의된 API(예: ptrace
)를 통하는 경우를 제외하고 다른 프로세스가 임의 코드를 실행하도록 허용되지 않습니다. 이를 허용하면 fork
.
아마도 당신이 시도할 수 있는 최선의 방법은 이 시점에서 프로세스에 연결하고 예상되는 프롬프트가 나타날 때 수동으로 호출하는 것입니다 gdb
. fork
그러나 이는 프로그램에 의도하지 않은 결과를 초래할 수 있으며 일반적으로 좋은 생각이 아닙니다. 동일한 프로세스의 여러 복사본을 실행하려고 하므로 이는 확장 가능한 접근 방식이 아니며 다른 것을 시도하는 것이 더 나을 것입니다.