첫째, exec
시스템 호출 패밀리는로드하는 바이너리를 실행하지 않고 자신의 이미지를 실행하지 않습니다. man exec
에 따라 : 그래서
The exec() family of functions replaces the current process image with a new process image.
, 그 특정 실행 이미지가 예약 할 준비가 얼마나 행동 것이다.
SCHED_BATCH
으로 예약 된 프로세스는 SCHED_OTHER
과 같은 멋진 값에 따라 예약됩니다. 일괄 작업은 사용자 상호 작용을 필요로하지 않으므로 스케줄러는 작업을 CPU를 많이 사용하는 것으로 간주합니다. man sched_setschedparam
인용 따라 SCHED_BATCH: Scheduling batch process
에서 -
당신이
SCHED_BATCH
에 프로세스의 스케줄링 정책을 변경하는 경우 따라서, 그것은 단지 예정 거의 모든 다른 정상 프로세스 (SCHED_OTHER, 기본 스케줄링 정책을) 좋아됩니다
This policy is similar to SCHED_OTHER in that it schedules the process according to its dynamic priority (based on the nice value).The difference is that this policy will cause the scheduler to always assume that the process is CPU-intensive. Consequently, the scheduler will apply a small scheduling penalty with respect to wakeup behaviour, so that this process is mildly disfavored in scheduling decisions.
. 완전한 기본 동작으로 폴백하려는 경우 SCHED_RESET_ON_FORK
플래그와 ORED를 예약 정책과 함께 사용해야합니다. 해당 플래그를 지정하면 새로 생성 된 모든 프로세스가 부모의 동작을 복사하는 대신 기본 스케줄링 정책으로 대체됩니다.
희망이 도움이됩니다.
기본적으로 내가 묻는 것은 다소 다르다. 나는 새롭게'forked' 자식 프로세스의 스케줄러를'sched_setscheduler'를 사용하여'SCHED_IDLE'로 설정하고있다. 이제 forked 자식 프로세스는'execvp' 시스템을 사용하여 새로운 프로세스를 생성한다. -call, 따라서 자식 프로세스의 이미지를 대체한다. 그래서이 새로 생성 된 프로세스는 자식 프로세스의 생성자와 동일한 스케줄러, 즉 SCHED_IDLE을 생성 할 것인가, 아니면 다를 수 있는가? – Jarvis
다시,'execvp'는 새로운 프로세스를 생성하지 않고, 호출 프로세스의 이미지를 대체합니다. fork()와 exec() 사이에는 차이점이 있습니다. 'fork()'는 호출 프로세스를 복제합니다 (이것은 메모리에 새로운 공간을 생성한다는 것을 의미합니다, execvp는 그렇지 않습니다). –
예, 이미지가 대체되면 이전 프로세스의 스케줄러가 새 프로세스에서 동일하게 적용됩니다. 맞습니까? – Jarvis