>  기사  >  시스템 튜토리얼  >  Linux 프로세스에 대해 알아야 할 사항

Linux 프로세스에 대해 알아야 할 사항

WBOY
WBOY앞으로
2024-02-15 15:00:04954검색

프로세스는 실행 중인 프로그램을 말하며 실행 중인 프로그램의 인스턴스입니다. 이는 파일, 다른 프로그램 또는 시스템 사용자의 입력에서 읽은 프로그램 지침과 데이터로 구성됩니다.

다음 가이드에서는 프로세스의 기본 개념을 살펴보고 특정 명령을 사용하여 Linux 시스템에서 프로세스를 관리하는 방법을 간략하게 소개합니다.

프로세스 유형

Linux 시스템에는 포그라운드 프로세스와 백그라운드 프로세스라는 두 가지 주요 프로세스 유형이 있습니다.

포그라운드 프로세스는 사용자와 직접 상호작용하는 프로세스를 말합니다. 일반적으로 사용자가 터미널에서 실행하는 명령은 포그라운드 프로세스로 실행됩니다. 이러한 프로세스는 터미널을 점유하고 출력을 사용자에게 직접 보냅니다.

백그라운드 프로세스는 백그라운드에서 실행되며 터미널을 점유하지 않고 사용자와 직접적인 상호 작용이 없는 프로세스입니다. 백그라운드 프로세스는 일반적으로 사용자가 영향을 받지 않고 터미널에서 다른 작업을 수행할 수 있도록 하는 장기 실행 작업이나 서비스를 수행하는 데 사용됩니다.

특정 명령을 사용하여 실행 중인 프로세스 보기, 새 프로세스 시작, 프로세스 일시 중지, 재개 또는 종료 등을 포함하여 이러한 프로세스를 관리하고 제어할 수 있습니다. 이러한 명령은 시스템의 프로세스를 효과적으로 관리하고 모니터링하는 데 도움이 될 수 있습니다.

으아악

데몬이란

이것은 시스템이 시작될 때 시작되고 항상 서비스로 실행되는 특별한 유형의 백그라운드 프로세스입니다. 시스템 작업(서비스로 실행)으로 자동으로 시작됩니다. 그러나 init 프로세스를 통해 사용자가 제어할 수 있습니다(RHEL&CentOs7 이후 systemd는 init 프로세스를 대체했습니다. 자세한 내용은 Linux 학습 방법 관련 콘텐츠를 참조하세요).
关于Linux 进程你要知道的事

Linux에서 프로세스 만들기

Linux에서 프로세스를 생성하는 방법에는 세 가지가 있습니다.

fork() 메서드

fork() 함수를 사용하여 상위 프로세스를 기반으로 하는 프로세스를 복사할 수 있으며 해당 PID 번호는 상위 프로세스 PID 번호와 다릅니다. Linux 환경에서는 copy-write로 구현되며, 새로운 자식 프로세스의 환경은 부모 프로세스와 동일하며, 나머지는 부모 프로세스와 공유됩니다. 상위 프로세스 또는 하위 프로세스 이후, 하나의 복사본을 재생성하기 전에만 수정할 수 있습니다.

system() 메서드

system() 함수는 /bin/sh –c 명령을 호출하여 특정 명령을 실행하고 명령 명령이 실행될 때까지 현재 프로세스의 실행을 차단합니다. 새로운 자식 프로세스는 새로운 PID를 갖게 됩니다.

exec() 메서드

exec() 메서드에는 이전의 fork() 및 system() 함수와 달리 여러 가지 기능이 있으며, exec() 메서드는 새 프로세스에서 실행됩니다. process PID 값은 원래 프로세스의 PID 값과 동일합니다.

Linux는 어떻게 프로세스를 식별합니까?

Linux는 다중 사용자 시스템이므로 여러 사용자가 시스템에서 다양한 프로그램을 실행할 수 있으므로 커널은 실행 중인 프로그램의 각 인스턴스를 고유하게 식별해야 합니다.

프로그램은 프로세스 ID(PID)와 상위 프로세스의 프로세스 ID(PPID)로 식별되므로 프로세스는 다음과 같이 분류될 수 있습니다.

으아악

초기 프로세스

init 프로세스는 시스템에 있는 모든 프로세스의 상위 프로세스입니다. Linux 시스템을 시작한 후 실행되는 첫 번째 프로그램으로 시스템의 다른 모든 프로세스를 관리합니다. 커널 자체에 의해 시작되므로 이론적으로는 상위 프로세스가 없습니다.

init 프로세스의 프로세스 ID는 항상 1입니다. 모든 하위 프로세스의 상위 프로세스입니다. (루트 디렉터리와 하위 디렉터리의 관계와 유사하게 모든 것이 뒤꿈치에서 시작되고 모든 것이 init 프로세스에서 시작됩니다.)

프로세스 ID 찾기

pidof 명령을 사용하여 프로세스의 프로세스 ID를 찾을 수 있습니다:

# pidof systemd
# pidof top
# pidof httpd
关于Linux 进程你要知道的事

要查找当前 shell 的进程 ID 以及它父进程的进程 ID,可以运行:

$ echo $$
$ echo $PPID
关于Linux 进程你要知道的事

在 Linux 中启动进程

每次你运行一个命令或程序(例如 cloudcmd – CloudCommander),它就会在系统中启动一个进程。你可以按照下面的方式启动一个前台(交互式)进程,它会被连接到终端,用户可以发送输入给它:

# cloudcmd
关于Linux 进程你要知道的事

Linux 后台任务

要在后台(非交互式)启动一个进程,使用 & 符号,此时,该进程不会从用户中读取输入,直到它被移到前台。

# cloudcmd &
# jobs
关于Linux 进程你要知道的事

你也可以使用 Ctrl + Z 暂停执行一个程序并把它发送到后台,它会给进程发送 SIGSTOP 信号,从而暂停它的执行;它就会变为空闲:

# tar -cf backup.tar /backups/*  ### 按下 Ctrl+Z
# jobs

要在后台继续运行上面被暂停的命令,使用 bg 命令:

# bg

要把后台进程发送到前台,使用 fg 命令以及任务的 ID,类似:

# jobs
# fg %1
关于Linux 进程你要知道的事

Linux 中进程的状态

在执行过程中,取决于它的环境一个进程会从一个状态转变到另一个状态。在 Linux 中,一个进程有下面的可能状态:

Running - 此时它正在运行(它是系统中的当前进程)或准备运行(它正在等待分配 CPU 单元)。
 
Waiting - 在这个状态,进程正在等待某个事件的发生或者系统资源。另外,内核也会区分两种不同类型的等待进程;可中断等待进程interruptible waiting processes - 可以被信号中断,以及不可中断等待进程uninterruptible waiting processes- 正在等待硬件条件,不能被任何事件/信号中断。
 
Stopped - 在这个状态,进程已经被停止了,通常是由于收到了一个信号。例如,正在被调试的进程。
 
Zombie - 该进程已经死亡,它已经停止了但是进程表process table中仍然有它的条目。

如何在 Linux 中查看活跃进程

有很多 Linux 工具可以用于查看/列出系统中正在运行的进程,两个传统众所周知的是 ps 和 top 命令:

1. ps 命令

它显示被选中的系统中活跃进程的信息,如下图所示:

# ps 
# ps -e | head 
关于Linux 进程你要知道的事

2. top – 系统监控工具

top 是一个强大的工具,它能给你提供 运行系统的动态实时视图,如下面截图所示:

# top
关于Linux 进程你要知道的事

3. glances – 系统监控工具

glances 是一个相对比较新的系统监控工具,它有一些比较高级的功能:

# glances
关于Linux 进程你要知道的事

如何在 Linux 中控制进程

Linux 也有一些命令用于控制进程,例如 kill、pkill、pgrep 和 killall,下面是一些如何使用它们的基本事例:

$ pgrep -u tecmint top
 
$ kill 2308
 
$ pgrep -u tecmint top
 
$ pgrep -u tecmint glances
 
$ pkill glances
 
$ pgrep -u tecmint glances
关于Linux 进程你要知道的事

给进程发送信号

Linux 中控制进程的基本方法是给它们发送信号。你可以发送很多信号给一个进程,运行下面的命令可以查看所有信号:

$ kill -l
关于Linux 进程你要知道的事

要给一个进程发送信号,可以使用我们之前提到的 kill、pkill 或 pgrep 命令。但只有被编程为能识别这些信号时程序才能响应这些信号。

大部分信号都是系统内部使用,或者给程序员编写代码时使用。下面是一些对系统用户非常有用的信号:

SIGHUP 1 - 当控制它的终端被被关闭时给进程发送该信号。
 
SIGINT 2 - 当用户使用 Ctrl+C 中断进程时控制它的终端给进程发送这个信号。
 
SIGQUIT 3 - 当用户发送退出信号 Ctrl+D 时给进程发送该信号。
 
SIGKILL 9 - 这个信号会马上中断(杀死)进程,进程不会进行清理操作。
 
SIGTERM 15 - 这是一个程序终止信号(kill 默认发送这个信号)。
 
SIGTSTP 20 - 它的控制终端发送这个信号给进程要求它停止(终端停止);通过用户按 Ctrl+Z 触发。

下面是当 Firefox 应用程序僵死时通过它的 PID 杀死它的 kill 命令事例:

$ pidof firefox
$ kill 9 2687
或
$ kill -KILL 2687
或
$ kill -SIGKILL 2687 

使用它的名称杀死应用,可以像下面这样使用 pkill 或 killall:

$ pkill firefox
 
$ killall firefox 

更改 Linux 进程优先级

在 Linux 系统中,所有活跃进程都有一个优先级以及 nice 值。有比点优先级进程有更高优先级的进程一般会获得更多的 CPU 时间。

但是,有 root 权限的系统用户可以使用 nice 和 renice 命令影响(更改)优先级。

在 top 命令的输出中, NI 显示了进程的 nice 值:

$ top
关于Linux 进程你要知道的事

使用 nice 命令为一个进程设置 nice 值。记住一个普通用户可以给他拥有的进程设置 0 到 20 的 nice 值。

只有 root 用户可以使用负的 nice 值。

要重新设置一个进程的优先级,像下面这样使用 renice 命令:

$ renice +8  2687
 
$ renice +8  2103

위 내용은 Linux 프로세스에 대해 알아야 할 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 lxlinux.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제