1. cmd 라인으로 시작

    $ process_name
    
  2. system call

    system("program_name")
    
  3. exec() , spawn() , fork()

    1. POSIX를 지원하는 함수 = posix_spawn()
    2. 각 함수 별 차이
      • exec() : 호출하는 process는 중지되고 호출되는 process는 동작함.
        • Process ID는 변경되지 않음.
      • spawn() : 호출하는 process 중지 안됨. 호출되는 process도 동작함.
        • Process ID는 새롭게 추가됨.
        • spawn() 함수의 인자값으로 들어있는 프로세스를 호출함.
      • fork()
        • 현재 프로세스를 복제
          • 상태정보를 그대로 가져감
        • PID와 fork()의 리턴 값은 달라지게된다
        • 메모리를 부모 process와 동일하게 할당 받기 때문에 부모 process가 이미 큰 메모리를 할당 받고 있다면 문제가 생길 수 있다
        • 메모리 뿐 아니라 다른 자원도 동일하게 사용 하기 때문에 공유 자원의 문제가 발생 할 수 도 있다
          • 부모 프로세스의 쓰레드가 mutex lock 상태이면 데드락 발생
      • posix_spawn
        • posix_spawn()/posix_spawnp() : 자식 프로세스 생성
          • 어떻게 , 어떤 자식 프로세스를 실행 시킬지 결정 가능
            • posix_spawnattr_t : spawn 속성 지정, API로만 접근 가능
            • posix_spawn_file_actions_t : file 작업 지정, API로만 접근 가능
          • 사용 방법
            • posix_spawnattr_init() 로 속성을 기본값으로 지정
            • 속성 지정
              • posix_spawnattr_*() 호출로 해당 플래그 지정
            • POSIX 플래그 지정
              • posix_spawnattr_setflags() 호출
            • QNX Neutrino flags 지정
              • posix_spawnattr_setxflags() 호출