본문 바로가기
Computer Science/UNIX & Linux

[UNIX/Linux] ep6+) 프로세스 정보 함수 실습

by 클레어몬트 2024. 10. 14.

ex1. 명령행 인자로 PID를 입력받아 해당 프로세스가 속한 프로세스 그룹 ID(PGID)를 출력하는 프로그램을 작성하시오. 명령행 인자로 지정된 PID가 0이면 현재 프로세스를 대상으로 PPID와 PGID를 구한다

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char* argv[]) {
    if (argc == 1) {
        printf("Input pid.\n");
        exit(1);
    }
    int pid;

    pid = atoi(argv[1]);
    if (pid == 0) {
        pid = getpid();
        printf("PPID : %d\n", getppid());
    }
    printf("PID : %d\n", pid);
    printf("PGID : %d\n", getpgid(pid));

    return 0;
}

 

 

 

ex2. 다음과 같이 프로그램 내에서 sleep() 함수를 사용해 5초간 잠들게 했을 때 전체 수행시간은 어떻게 되는지 프로그램을 작성해 확인하시오

 

int main() {

    sleep(5);

}

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/times.h>
#include <time.h>
#include <unistd.h>

int main() {
    int i;
    time_t t;
    struct tms mytms;
    clock_t ct, t1, t2;

    ct = sysconf(_SC_CLK_TCK);

    if ((t1 = times(&mytms)) == -1) {
        perror("times 1");
        exit(1);
    }

    sleep(5);
    
    if ((t2 = times(&mytms)) == -1) {
        perror("times 2");
        exit(1);
    }

    printf("real time : %.1f sec\n", (double)(t2 - t1) / ct);
    printf("user time : %.1f sec\n", (double)mytms.tms_utime / ct);
    printf("system time : %.1f sec\n", (double)mytms.tms_stime / ct);

    return 0;
}

A2. 전체 수행시간은 5초가 더 추가된다

 

 

 

ex3. 명령행 인자로 입력받은 환경 변수의 값을 출력하는 프로그램을 작성하라

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char* argv[]) {
    if (argc != 2) {
        printf("usage: ex1 name\n");
        exit(1);
    }
    char* val;

    val = getenv(argv[1]);
    if (val == NULL) {
        printf("%s not defined\n", argv[1]);
    } else {
        printf("%s = %s\n", argv[1], val);
    }
}

 

 

 

ex4. putenv() 함수를 사용해 환경 변수 SHELL의 값을 변경하는 프로그램을 작성하라. 이때 변경할 값은 명령행 인자로 받는다.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    if (argc != 2) {
        printf("Usage: ex2 value\n");
        exit(1);
    }
    char* val;
    char str[256];

    val = getenv("SHELL");
    if (val == NULL) {
        printf("SHELL not defined\n");
    } else {
        printf("1. SHELL = %s\n", val);
    }

    sprintf(str, "SHELL=%s", argv[1]);
    putenv(str);

    val = getenv("SHELL");
    printf("2. SHELL = %s\n", val);

    return 0;
}

프로그램이 끝나면 다시 원래대로 돌아온다

 

 

 

ex5. setenv() 함수를 사용해 환경 변수 TESTENV를 새로 정의하고 그 값을 ubuntu로 설정, getenv() 함수로 검색해 출력하는 프로그램을 작성하라

#include <stdio.h>
#include <stdlib.h>

int main() {
    char* val;

    setenv("TESTENV", "ubuntu", 0);
    val = getenv("TESTENV");
    if (val == NULL) {
        printf("TESTENV not defined\n");
    } else {
        printf("TESTENV = %s\n", val);
    }

    return 0;
}

프로그램이 끝나도 계속 유지되지는 않는다

 

 

 

 

 

 

 

참고 및 출처: 시스템 프로그래밍 리눅스&유닉스(이종원)