시스템프로그래밍(리눅스&유닉스 질문합니다)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int i;
pid_t pid;
int status;
int start_time, end_time;
for (i = 0; i < 5; i++) {
switch (pid = fork()) {
case -1:
perror("fork");
exit(1);
break;
case 0:
// 자식 프로세스들이 실행할 명령어들
switch (i) {
case 0:
execlp("ps", "ps", "-al", NULL);
break;
case 1:
execlp("ls", "ls", "-l", NULL);
break;
case 2:
execlp("who", "who", NULL);
break;
case 3:
execlp("pwd", "pwd", NULL);
break;
case 4:
execlp("date", "date", NULL);
break;
default:
exit(0);
break;
}
break;
default:
// 부모 프로세스는 자식 프로세스가 종료될 때까지 대기
wait(&status);
if (WIFEXITED(status)) {
// 자식 프로세스가 정상적으로 종료되었을 때
end_time = time(NULL);
printf("Child process %d terminated. Execution time: %d seconds\n", pid, end_time - start_time);
} else {
// 자식 프로세스가 비정상적으로 종료되었을 때
printf("Child process %d terminated abnormally.\n", pid);
}
break;
}
if (i == 0) {
start_time = time(NULL);
}
}
return 0;
}
이 코드는 fork와 exec 함수를 사용해서 자식 프로세스를 동시에 5개를 fork 하고 자식 프로세스는 이 명령어들을 수행하게 할 목적으로 작성한 것입니다.
gcc 설치하셔서 실행하시면 됩니다.
리눅스에서 사용하는 c언어 컴파일러예요
설치 및 사용법은 다음과 같습니다.
1. gcc가 설치되어 있는지 확인
gcc --version
gcc 버전이 나오지 않으면 2번으로
2. gcc 설치
sudo apt-get install gcc
3. 코드 컴파일
gcc [.c 파일 경로] -o [파일 명]
4. 컴파일 완료된 파일 실행
./[파일 명]