본문 바로가기

Programming/Linux

프로세스 끼리의 통신 - pipe() 파이프는 프로세스끼리의 통신(IPC)를 할 때 사용되는 방법 중 하나입니다. pipe()로 생성하는 파이프는 프로세스 내에 생성되는 것이 아닌 커널에 생성되며 파이프를 사용할 수 있는 파일 디스크립터만 프로세스에게 주어지게 됩니다. 그러므로 하나의 프로세스가 파이프를 생성하고, 그 파이프의 파일 디스크립터를 사용하여 프로세스간 통신을 할 수 있게 됩니다. 여기서 생성된 파이프에서 신경써야 할 것은 바로 파이프의 입출력 방향이 이미 결정되어 있다는 것입니다. 따라서 파이프를 생성하면 이를 이용할 수 있는 2개의 파일 디스크립터가 만들어지게 됩니다. pipe함수의 원형은 int pipe(int fd[2]) 입니다. 인자로 들어오는 두 개의 파일 디스크립터 중 fd[0]은 파이프의 읽기 전용 파일 디스크립터이.. 더보기
자식프로세스 생성 - fork() ※제가 공부한 내용을 정리한 내용이라 설명이 부실하고 혹은 올바르지 않은 부분도 있을 수 있습니다. 리눅스에서 fork함수를 사용하면 현재 프로세스의 자식 프로세스를 만들 수 있습니다. fork함수는 unistd.h라는 헤더에 선언되어 있습니다. 부모프로세스에서 fork함수를 호출하여 자식 프로세스를 만들면 자식 프로세스는 부모프로세스와 완벽히 똑같은 프로세스가 생성됩니다. 다만 하나, fork리턴 값이 0으로 설정된다는 차이점이 있습니다. 이 리턴값으로 부모인지 자식인지를 구분할 수 있습니다. 부모에서 fork를 호출하면 리턴값으로 자식의 pid가 리턴됩니다. 즉, 0이 리턴이 됐다면 자식 프로세스인 것이고 그 외의 값이 리턴됐다면 부모 프로세스 인 것입니다. 다만 -1이 리턴된다면 이는 자식 프로세스.. 더보기