程序和进程的区别和联系
程序(Program):
- 程序是一组指令的集合,通常存储在磁盘或其他存储设备上,是一种静态的概念。
- 程序本身并没有运行,它只是一个可执行的文件或脚本,包含了一系列的指令和数据。
- 程序可以是编译后的可执行文件(如
.exe
文件)、脚本文件(如.sh
、.py
等)、动态链接库等形式。
进程(Process):
- 进程是程序在运行过程中的一个实例,是操作系统分配资源的基本单位。
- 每个进程都有独立的内存空间,包括代码段、数据段、堆栈等。
- 一个进程对应着一个执行中的程序
总而言之:
程序是静态的,存储在磁盘或其他存储设备中;而进程是动态的,是程序在运行时的实例。程序是概念上的代码和数据集合;进程是程序实际运行时的实体,具有独立的状态和资源。
那线程又是什么呢?
线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程的一个实体。与进程不同的是,同属于一个进程内的多个线程共享相同的内存空间和系统资源,包括地址空间、文件描述符和其他进程的资源。一个进程中的线程可以被理解为程序的多线程,每个线程可以执行程序中的不同部分或者并行执行相同的代码段。所以,进程中的线程可以被称为程序的多线程,它们共同完成程序在计算机上的并发执行。多线程程序的主要优势在于可以提高程序的并发性和响应能力。
进程相关命令总览
ps 命令
ps -ef(列出当前系统中所有进程的详细信息)
在输出中,每一列的含义通常如下:
- UID:进程的用户ID,表示该进程是由哪个用户启动的。
- PID:进程ID,是唯一标识系统中每个进程的数字。
- PPID:父进程ID,指示启动(创建)该进程的父进程的ID。
- C:CPU使用的累计时间(单位为分钟)。如果进程使用的CPU时间超过999分钟,它会显示为
999:00
。 - STIME:进程启动的时间或日期。
- TTY:终端设备,如果没有分配终端,显示
?
。 - TIME:进程消耗的CPU时间。
- CMD:启动进程的命令行命令。
其中,1号进程通常指的是init进程或systemd
具体解释如下:
init进程:在传统的Unix系统中,init进程是所有进程的祖先,其进程ID通常为1。它是系统启动时由内核启动的第一个进程,并且负责启动和管理所有其他进程。init进程的职责包括系统的初始化、服务的启动和关闭等。
systemd:在许多现代Linux发行版中,init进程已经被systemd所取代。systemd是一个系统和服务管理器,它负责启动、管理和监控系统上运行的进程、服务和资源。类似于传统的init进程,systemd的进程ID也通常是1。
这些进程(init或systemd)在Linux系统中起着非常重要的作用,它们是系统的第一个用户空间进程,负责初始化系统环境并确保其他进程能够正常运行。
TTY的解释
TTY列显示了该进程的终端设备。如果一个进程没有被分配到任何终端,TTY列会显示为?。
通常来说守护进程,后台作业,系统服务有关的进程一般都不分配任何终端。一个进程没有分配到任何终端(TTY列显示为?
),意味着它不与当前用户的任何终端会话直接关联。这种情况下,它通常是一个独立运行的进程,可能是一个守护进程、后台作业或系统服务。这并不意味着它没有其他进程依附或依赖,只是它不接受来自用户终端的交互。
更通俗来讲意思是:即使用户在任何终端上输入命令或者进行其他操作,也不会影响到这个进程的正常执行。这种进程通常是独立运行的后台进程或者服务,它们不依赖于用户的交互来运行或者完成任务。这种设计使得系统可以同时运行一些不需要用户干预的服务或者任务,例如网络服务、定时任务等。