본문으로 이동

개인적인 사정으로 큰숲백과 관리를 무기한 중단합니다. 데이터베이스 덤프 관련 공지도 조만간 올리겠습니다.

  1. 큰숲백과:청사진에서 위키 발전의 대략적인 방향성을 제시했습니다. 의견이 있으신 분은 큰숲백과토론:청사진에서 의견을 남겨주시면 좋겠습니다.
  2. 기능상의 오류로 지원하지 않고 있는 기능에 대해서는 큰숲백과토론:이슈 트래커에 요약했습니다. 참고하시기 바랍니다.
  3. 큰숲백과 단축도메인 bigforest.wiki 열렸습니다.

리눅스/리눅스 시스템 프로그래밍: 두 판 사이의 차이

1,891 바이트 추가됨 ,  2023년 6월 29일 (목)
49번째 줄: 49번째 줄:


=== 프로세스의 생성과 소멸 ===
=== 프로세스의 생성과 소멸 ===
리눅스는 기본적으로 한 프로세스에서 프로세스를 추가로 만든다면 부모가 되는 자기 자신의 정보(열린 파일 디스크립터들이나 메모리 페이지 정보 등)를 복사하는 식으로 프로세스를 생성한다. 그래서 한 프로그램이 다른 프로그램을 실행해야 할 경우에는 fork() 후에 추가로 exec() 함수를 호출해서 프로세스가 실행하는 프로그램을 바꾸어야 한다.
* fork() : 자식 프로세스를 부모 프로세스를 복사하는 식으로 만들고 그 PID를 반환. fork 이후 부모와 자식 중 어느 것이 실행될지는 정해지지 않는다.
** vfork() : exec()을 실행할 때까지 메모리 정보를 자식에게 복사하지 않고 fork()
** clone(func, childstack, flags, ...) : 프로세스가 아닌 스레드를 만든다. 따라서 호출할 때 프로그램 내의 특정 함수를 파라미터까지 넘겨 실행하도록 한다.
* exec() :
* execve(pathname, argv, envp) : 프로세스가 새 프로그램을 실행하도록 프로그램 정보를 교체
** execle, execlp, execvp, execv, execl 등의 파생 함수가 있다.
* exit(status) : 종료 핸들러를 호출하고 stdio 버퍼에 남은 내용을 출력하며 _exit() 호출. 종료 핸들러는 atexit(handlerfunc)나 glibc의 on_exit(handlerfunc, args)으로 정의
** _exit(status) : 프로세스의 진정한 정상 종료 함수. 파일 디스크립터 정리, 세마포어나 IPC 기능 전부 해제, 메모리 매핑 해제 등을 수행하고 프로세서 그룹 내 자식들에게 SIGHUP과 SIGCONT 전송
* wait(&status) : 자식 프로세스가 종료될 때까지 부모 프로세스를 정지. waitpid(pid, status, options)로 특정 자식만 지정하여 기다릴 수 있다.
셸 명령어를 호출해 실행해야 할 경우에는 system(command)가 별도로 존재한다.
=== 프로세스 스케줄링 정책과 우선순위 ===
=== 프로세스 스케줄링 정책과 우선순위 ===
=== 경량 프로세스(Lightweight Process) ===
=== 경량 프로세스(Lightweight Process) ===