UNIX서버 4주차

2022. 4. 19. 02:03·학교수업

프로세스 : 실행 중인 프로그램

- 각 프로세스는 유일한 프로세스 번호 PID를 가짐(0~양수0

- ps 명령어를 사용하여 현 단말기에서 실행된 프로세스들을 볼 수 있다.

 

쉘의 역할 -> 커널을 사용자들이 마구잡이로 사용하는 것을 막기위한 의도

- 사용자가 명령어를 쓰기 위한 인터페이스같은 존재다.

- 쉘은 사용자와 운영체제 사이의 창구 역할을 하는 프로그램

- 명령어 처리기

- 사용자로부터 명령어를 받아 이를 처리한 후 결과 반환

 

쉘 실행 절차

- 시작 파일 읽고 실행

- 프롬포트 출력 후 사용자 명령 기다림

- 사용자 명령 기다림

 

사용자 차원 설정 파일

~/.bash_profile, ~/.bashrc

 

복합 명령어

- 명령어 열 : 명령어들을 순차적으로 실행

-> $ 명령어1; 명령어2; 명령어3; ...

- 명령어 그룹

- 명령어 그룹의 명령들은 순차적으로 실행되지만, 하나의 명령처럼 표준 입출력, 오류를 공유

-> $ (명령어1;...;명령어n)

 

전면처리

- 명령어를 입력하면 명령어가 전면에서 실행 -> 명령어 실행이 끝날 때까지 쉘이 기다린다.

$ 명령어

- ^C(강제실행종료)

- ^Z(실행 잠시 중단, 프로세스 종료 X)

- $ fg # 중단된 프로세스를 다시 전면 작업으로 실행

 

후면처리

- 명령어들이 후면에서 처리되고, 전면에서는 다른 작업을 할 수있어 동시에 여러 작업을 수행할 수 있다.

$ 명령어 &

 

$ fg %작업번호

 

후면 처리에서는 입출력 재지정을 이용(전면 처리의 입출력과의 혼동을 해결)

 

실행 잠시 멈춤 : sleep 초

$(echo 시작; sleep 10; echo 끝) -> 시작 메세지 출력, 10초 후 끝 메세지 출력

 

실행 강제 종료 : kill[-시그널]  프로세스번호

$(echo 시작;sleep 20; echo 끝) &

[작업 번호]프로세스 번호가 나옴

$kill %작업 번호 또는 $kill 프로세스 번호

 

wait [프로세스번호]

- 해당 프로세스 번호가 종료될 때까지 기다린다.

- 번호를 지정해주지 않으면, 모든 자식 프로세스를 기다린다.

 

exit

- 쉘을 종료하고 종료코드를 부모 프로세스에 전달

- $exit [종료코드]

 

프로그램을 실행시키는 방법

1. 쉘 프롬프트에서 프로그램을 지정하여 실행

2. 프로세스 내에서 exec를 호출하여 다른 프로그램 실행

- 두 방법이 근본적으로 동일

-> C 시작 루틴에 명령행 인수와 환경 변수를 전달하면 ,시작 루틴이 main 함수를 호출

- C 시작 루틴

-> main 함수를 호출하면서 명령행 인수, 환경 변수를 전달

- 종료시

- exit(main(argc,argv)); : main 실행이 끝나면 반환 값을 받아 OS에게 전달하고 스스로 종료

-> argc : 명령줄 인수의 개수, argv[] : 명령줄 인수 리스트를 나타내는 포인터 배열

 

환경변수 가져오기 getenv();

 

프로그램 종료

1. 정상 종료 : main()실행을 마치고 리턴하면 C 시작 루틴은 exit()호출

- 프로그램 내에서 직접 exit()호출 : cleanup처리 후 종료

- 프로그램 내에서 직접 _exit()호출 : 즉시종료

2. 비정상 종료

- abort()

- 시그널에 의한 종료

 

프로세스 ID

- 각 프로세스는 프로세스를 구별하는 번호인 프로세스 ID를 가진다.

- 각 프로세스는 자신을 생성해준 부모 프로세스가 있다.

int getpid(); 현 프로세스 ID 반환

int getppid(); 부모 프로세스의 ID 반환

 

프로세스의 사용자 ID : getuid 실제 그룹 ID : getgid()

- 프로세스를 실행한 원래 사용자의 사용자 ID

 

프로세스의 유효 사용자 ID : geteuid 유효 그룹 ID : getegid()

- 현재 유효한 사요자 ID로 새로 파일을 만들거나 파일에 접근할 때 주로 사용

- 보통 유효 사용자 ID와 실제 사용자 ID는 특별한 실행파일을 실행 할 때를 제외하고는 동일하다.

 

비밀번호 변경은 어떻게하는가?

이는 root만이 접근 가능 하지만 일반 사용자가 passwd를 변경한다.

이는 set-user-id를 사용하여 해결한다.

set-user-id는 유효 사용자 ID는 그 실행파일의 소유자로 바꾼다. 프로세스가 실행하는 동안만.

즉, 유효 사용자 ID 가 root가 되며 패스워드 변경이 가능해진다.

 

프로그램 상세

- 프로세스는 실행중인 프로그램

- 프로그램 실행을 위해서는 프로그램 코드, 데이터, 스택, 힙, U-영역 등이 필요하다.

-> 5자기 영역으로 구현되어있다.

- 프로세스 이미지(구조)는 메모리 내 프로세스 레이아웃

- 실행 파일 자체는 프로세스가 아니다.

 

프로세스 구조

1. 텍스트, 코드

- 실행 코드 저장

2. 데이터

- 전역 변수 및 정적 변수를 메모리 영여겡 저장 (bss:초기화 되지 않은 전역, 정적 변수)

3. 힙

- 동적 메모리 할당을 위한 영역

4. 스택

- 함수 호출을 구현하기 위한 실행시간 스택을 위한 영역으로 활성 레코드가 저장

5. U-영역

- 열린 파일 디스크립터, 현재 작업 디렉터리 등 같은 프로세스 관련 정보 저장

저작자표시 (새창열림)

'학교수업' 카테고리의 다른 글

UNIX서버 6주차  (0) 2022.04.20
UNIX 서버 5주차  (0) 2022.04.19
윈도우즈 프로그래밍 5주차  (0) 2022.04.16
윈도우즈 프로그래밍 6주차  (0) 2022.04.16
컴퓨터 구조 6주차  (0) 2022.04.13
'학교수업' 카테고리의 다른 글
  • UNIX서버 6주차
  • UNIX 서버 5주차
  • 윈도우즈 프로그래밍 5주차
  • 윈도우즈 프로그래밍 6주차
숯불돼지왕갈비
숯불돼지왕갈비
  • 숯불돼지왕갈비
    게임 개발 공부기
    숯불돼지왕갈비
  • 전체
    오늘
    어제
    • 분류 전체보기 (297)
      • 학교수업 (165)
      • 취업강의 (6)
      • C++ (47)
        • 코딩 테스트 (3)
      • Unreal Engine 5 (25)
        • MMORPG 개발 (25)
      • Unreal Engine 4 (44)
        • Omak Project (3)
        • Unreal Engine 4 개발일지 (9)
        • Unreal Engine 4 (32)
      • Unity (1)
        • 개발 일지 (1)
      • 수학 (3)
        • 소프트웨어 공학용 수학 (3)
      • DirectX 11 (1)
      • 게임 디자인 패턴 (2)
      • 포트폴리오 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • SQLD (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
숯불돼지왕갈비
UNIX서버 4주차
상단으로

티스토리툴바