프로세스(process) 란 어렵게 말할 필요 없이 아주 간단하게 현재 컴퓨터에서 실행 중인 프로그램을 일컫는 말이다.
ctrl+alt+delte -> 작업 관리자

그러면 내가 현재 사용 중인 프로그램을 보여준다
리눅스로 들어가기 전에 기본적은 단어 몇 가지만 알아보고 가자
1.PID
pid 란 process id 프로세스의 고유 식별 번호 같은 것이다
2.ni
ni란 nice의 줄임말인데 리눅스에서는 이를 프로세스의 우선순위를 정하는 단어로 정의되어 있다 프로세스의 우선순위를 정하면 말 그대로 우선순위가 높은 프로세스를 먼저 처리하게 된다.
3. 백그라운드, 포어그라운드
백그라운드는 많이들 들어봤을 텐데 알아듣기 쉽게 윈도우로 예를 들어보겠다 우리가 인터넷을 켜서 네이버 창을 화면에 띄어놨다고 가정하면 그것은 우리 눈앞에 있으니 포어그라운드가 된다 반대로 인터넷을

이 창을 눌러 닫으면 우린 아무것도 켜져 있지 않은 바탕화면을 보게 된다 이는 우리가 방금까지 하고 있던 인터넷을 백그라운드로 숨긴 것이다 하지만 우리는 인터넷을 x를 눌러 종료한 것이 아니기에 다시

이 인터넷 창을 누르면 방금 전까지 하고 있던 인터넷 창을 다시 볼 수 있다. 이렇게 가져와서 다시 인터넷 창이 우리 눈앞에 보이면 그것은 다시 포어그라운드가 되는 것이다.
스마트폰으로 예시를 들면 게임 도중에 전화가 와서 전화를 받으면 전화받는 화면이 포어그라운드 게임은 백그라운드로 안 보이게 꺼지지 않고 돌아가고 있는 것이다 전화를 끊고 다시 게임 화면을 앞으로 가져오면 그 게임이 포어그라운드로 돌아오는 것이다.
리눅스는 gui 환경을 사용하는 것이 아니라면 윈도우처럼 여러 가지를 포어그라운드로 띄우는 것이 불가능하니 이는 쩌어어 아래에 bg, fg 명령을 통하여 관리하여야 한다
이제 리눅스로 들어가서 윈도우의 작업관리자(응용 프로그램) 현재 사용 중인 프로그램을 확인할 수 있는 명령어를 쳐보자
ps
#>ps [option]
-a 모든 사용자
-u 이름, 시간, ....
-x 완료되지 않은 프로세스 --> BSD 구문을 사용하여 시스템의 모든 프로세스를 확인
-e 실행 환경
-f full format --> 표준 구문을 사용하여 시스템의 모든 프로세스를 확인

현재 실행 중인 프로그램을 확인해보면 방금 검색한 명령어 ps 와 기본적으로 항상 돌아가고 있는 bash라는 것이 실행 중인 것으로 나와있다.

ps -ef 옵션을 사용하여 확인해보자
ex) ps -ef
UID PID PPID C STIME TTY TIME CMD
----- ---- ------ -- ------- ---- ------ ------
1) 2) 3) 4) 5) 6) 7) 8)
1) UID 프로세스 소유자
2) PID 프로세스 고유 번호
3) PPID 부모 프로세스의 PID
4) C CPU 사용량
5) STIME 프로세스 시작 시간
6) TTY 연결된 터미널
tty[num] 로컬 터미널
pts/[num] 원격 터미널
7) TIME CPU 사용시간
8) CMD Command( 프로세스명 )
다시 윈도우로 돌아와서 (프로세스) 란 것을 확인해보자.

작업관리자로 돌아와서 프로세스를 확인해보면 현재에도 컴퓨터가 여러 가지 일(process)들을 실행 중인 것을 확인할 수 있다 우리 눈에는 보이지 않지만 컴퓨터는 현재 운영체제를 가동하기 위한 프로세스와 크롬을 실행할 때 베이스로 깔아두는 프로세스 등 여러 가지들이 실행 중인 것이다
보통은 리눅스에서 이 많은 프로세스 들을 확인할 때에는 #> ps -aux 옵션을 넣어서 확인한다
-a -u -x 옵션은 무슨 역할을 하는지 위에 적어놨다

top
top는 아래의 사진과 같이 실시간으로 프로세스 정보를 확인할 수 있는 명령어이다.
q를 눌러 작동을 멈출 수 있다.

fg, bg
fg 와 bg 명령어는 그냥 일반적으로 설명하면 약간 어렵다고 느낄 수 있는데 아주 쉽게 설명해 보겠다
우선 fg, bg 명령어를 알아보기 전에 두 가지 명령어만 더 알아보자
&
command ~ [&]
리눅스에서 어떠한 명령어를 실행할 때 뒤에 &을 붙이면 백그라운드로 실행할 수 있게 된다. 만약 뭔가 오래 걸리는 작업을 할 때에는 뒤에 & 을 붙여보자 만약 yum 명령어로 굉장히 다운로드가 오래 걸리는 것을 다운로드한다면 그 다운로드하는 동안 우리는 아무것도 할 수 없고 그냥 기다려야만 한다. 이를 백그라운드로 실행하면 다운을 받으면서 다른 행동도 할 수 있다.
sleep
#> sleep [num]
이건 뭐 하는 명령어인지는 아는데 뭐 할 때 쓰는 건지는 잘 모르겠다 #> sleep 60 이렇게 사용하면 사용한 그라운드가 60초 동안 아무것도 할 수 없는 상태가 된다 프로세스를 학습하는 환경에서 유용한 명령어이니 이 명령어로 설명을 하겠똬
우선 sleep 명령어를 그냥 사용하면

이렇게 아무것도 할 수 없는 상태가 된다 이때 ctrl+z를 누르면 해당 프로세스를 일시정지시키며 백그라운드로 넘기게 된다.
jobs
백그라운드 프로세스를 확인하는 명령어
ctrl + z를 눌러 프로세스를 멈춘 후 백그라운드로 넘겨보자 그리고 jobs로 백그라운드 프로세스를 확인해보면?

이런 식으로 확인이 된다
[1]+ Stopped sleep 100
--- -- ---------- -----------
1) 2) 3) 4)
1. 작업 번호 (백그라운드 프로세스는 pid 도 당연히 붙지만 작업 번호라는 것이 붙음)
2. 단축키 같은 개념 bg, pg 명령어로 사용
3. 실행 중인 프로세스의 상태
4. 실행 중인 프로세스

ps 명령어를 통해서도 확인할 수 있다 ps는 실행 중인 프로세스를 확인하는 명령어.
sleep 명령어 앞에 pid 5523 번이 붙은 것을 확인할 수 있다.
이번에는 #> sleep 1000 & 을 통하여 sleep 명령어를 1000초 동안 백그라운드로 실행되게 해보자

sleep 1000 & 명령어를 입력했더니 [1] 5622 작업 번호와 pid 번호를 출력해준다 &을 사용해 바로 백그라운드로 실행하여서 1이라는 작업 번호를 같이 출력해준 것이다 jobs 명령어를 사용해 백그라운드로 돌아가고 있는 명령어를 확인할 수 있다.
이제 bg, fg 명령어를 알아보자 이건 윈도우로 치면 alt+tab이라고 생각하면 편하다
fg는 백그라운드로 실행 중인 프로세스를 포어그라운드로 변경하는 것이다
#> fg [% 작업 번호]
우선 지금 실행 중인 sleep 1000 명령어를 fg 명령어를 통하여 포어그라운드로 가져와보자

fg 명령을 통해 포어그라운드로 sleep 을 가져왔더니 아까 그냥 sleep 을 사용했던 것처럼 화면이 아무 동작도 하지 않고 멈춘 상태가 됐다. 포어그라운드로 가져왔다는 뜻이다
다음 명령어도 알아봐야 하니 ctrl+z를 눌러 정지를 시킨 후 다시 백그라운드로 돌려놓자
bg는 포어그라운드로 실행 중인 프로세스를 백그라운드로 변경하는 것이다
#> ctrl + z
bg 명령어를 fg 명령어와 똑같이 사용하여 백그라운드로 전환할 수 있지만 보통은 앞에서도 많이 썼듯이 ctrl+z를 통하여 백그라운드로 전환한다 하지만 이렇게 백그라운드로 전환을 하게 되면

이렇게 실행 중이었던 게 멈추게 된다 이를 다시 실행시키려면 kill이라는 명령어를 통하여 실행시켜야 한다 ㅠㅠ 귀찮지만 그래야 한다 다시 실행시키기 전에 kill이라는 명령어도 알아보고 가자
kill
#> kill [option] [(% 작업 번호) 또는(pid)]
- 정지 #>kill -19 [(% 작업 번호) 또는(pid)]
- 재시작 #>kill -18 [(% 작업 번호) 또는(pid)]
- 종료 #>kill -9 [(% 작업 번호) 또는(pid)]
이제 kill 명령어를 사용하여 멈춰있던 sleep 프로세스를 다시 재시작해주자

이와 같이 ps로 pid를 알아낸 후 사용해도 되고 아니면 jobs로 작업 번호를 확인하여 작업 번호로 사용해도 된다.
백그라운드 작업 번호와 + , -
백그라운드 프로세스는 생성 시에 그냥 프로세스 실행했을 때와 달리 작업 번호와 작업 번호 옆에 +,- 등을 생성하는데 이는 단축키 같은 거라고 생각하면 편하다 +,-는 백그라운드 프로세스 중에 나중에 실행한 프로세스에 붙게 된다.

백그라운드로 sleep 명령어를 4개를 실행시켜보자

jobs 명령어로 확인해보면 저렇게 4개의 sleep 명령어가 실행 중인 것으로 나온다 이는 fg bg 명령어를 사용할 때 편리하다고 앞에 말했는데 먼저 fg +명령어를 사용하여 해당 프로세스를 포어그라운드로 가져와보자

#> fg +를 사용했더니 위에 jobs에서 확인했던 +가 붙어있던 sleep 4000 이 fg 명령을 실행해 포어그라운드로 올라왔다 이를 다시 ctrl+z를 사용해 백그라운드로 넘긴 후에 fg -를 사용해보자

-가 붙어있던 sleep 3000이 포어그라운드로 올라오는 것을 확인할 수 있다 이제 +,- 가 단축키 같은 것이라고 했던 것이 이해가 되는가?

이와 같이 왜 백그라운드만 작업 번호라는 것이 붙게 되는 줄 이해가 되는가?? 이쯤 되면 fg, bg 명령어가 윈도우의 alt+tab이라고 설명한지 이해가 갈 것이라 생각한다
nice, renice
모든 프로세스에는 우선순위가 정해져 있고 그 우선순위를 순서로 일처리를 더 빠르게 처리한다
nice는 우선순위를 지정하여 프로그램을 실행하는 명령어
#>nice -[ni] [command] -를 하나만 쓰면 +가 되고
#>nice -[ni] [command] --를 두개를 쓰면 -가 된다
renice는 실행 중인 프로세스의 우선순위를 변경하는 명령어 nice명령어와 다르게 ni값을 기존 값 에서 -, -- 로 지정하는게 아닌 바로 ni값을 지정해 줄 수 있다
#>renice [ni] [option]
-u [user_name]
-g [group_name]
-p [pid]
nice와, renice는 프로세스의 우선순위를 정하는 명령어이다( -20( ↑ ) ~ 19( ↓ ) ) 우선순위가 -20에 가까울수록 높아지게 되고 19에 가까울수록 낮아지게 된다 왜 이렇게 헷갈리게 만들어 놓은지는 잘 모르겠지만 -가 붙어야지 우선순위가 높은 거라고 머릿속에 기억해두자 nice 명령어를 사용하지 않고 명령어를 사용하면 기본 우선순위 NI값은 0이다

#> nice -15 sleep 500 &
위 명령어를 치면 sleep명령어를 우선순위 15로 설정하여 우선순위를 낮추고 500초동안 백그라운드에 실행되게 하는 명령어이다 반대로 우선순위를 높이고 싶으면 --15로 입력해주면 된다
다음은 renice를 통해 실행중인 프로세스의 우선순위를 바꿔 보겠다
#> sleep 4000 & / sleep명령어를 4000초동안 백그라운드로 실행되는 명령어 실행

아래 102316이라고 나온 PID를 이용하여 해당 프로세스의 우선순위를 높여보자
#> renice -5 -p 102316 / PID 102316의 우선순위를 -5로 설정한다
#> ps -l / 해당 명령어로 102316프로세스의 NI값이 -5가 된 것을 확인 할 수 있다.

'Linux 2급' 카테고리의 다른 글
리눅스 c 컴파일러 명령어 (gcc) (0) | 2023.11.03 |
---|---|
리눅스 RAID 종류와 구성 방법(Redundant Array of inexpensibe/independent Disk) (mdadm) (0) | 2023.11.03 |
리눅스 패키지 관리,설치,(rpm, yum, wget) yum 저장소 추가(REMI,IUS,EPEL) (0) | 2023.11.02 |
리눅스 find 명령어 atime,ctime,mtime 차이점 (0) | 2023.11.02 |
리눅스 파일시스템 구조, i-node, 링크 파일(ln, ls -i) (0) | 2023.11.02 |