一般的话是只有那些需要连接网络(包括局域网)的服务才会用到端口。而如果存在一个端口,那么就一定是对应有一个服务开启了这个端口,并且会在某些时刻使用它进行通信。下面学习啦小编为大家分享LINUX端口和服务的关系。

LINUX的端口和服务

计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等。这些最基础的计算机动作被称为指令 (instruction)。所谓的程序(program),就是这样一系列指令的所构成的集合。通过程序,我们可以让计算机完成复杂的操作。程序大多数时候被存储为可执行的文件。这样一个可执行文件就像是一个菜谱,计算机可以按照菜谱作出可口的饭菜。

那么,程序和进程(process)的区别又是什么呢?

进程是程序的一个具体实现。只有食谱没什么用,我们总要按照食谱的指点真正一步步实行,才能做出菜肴。进程是执行程序的过程,类似于按照食谱,真正去做菜的过程。同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。

操作系统的一个重要功能就是为进程提供方便,比如说为进程分配内存空间,管理进程的相关信息等等,就好像是为我们准备好了一个精美的厨房。

看一眼进程

首先,我们可以使用$ps命令来查询正在运行的进程,比如$ps -eo pid,comm,cmd,下图为执行结果:

(-e表示列出全部进程,-o pid,comm,cmd表示我们需要PID,COMMAND,CMD信息)

每一行代表了一个进程。每一行又分为三列。第一列PID(process IDentity)是一个整数,每一个进程都有一个唯一的PID来代表自己的身份,进程也可以根据PID来识别其他的进程。第二列COMMAND是这个进程的简称。第三列CMD是进程所对应的程序以及运行时所带的参数。

(第三列有一些由中括号[]括起来的。它们是kernel的一部分功能,被打扮成进程的样子以方便操作系统管理。我们不必考虑它们。)

我们看第一行,PID为1,名字为init。这个进程是执行/bin/init这一文件(程序)生成的。当Linux启动的时候,init是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。这一进程有特殊的重要性,我们会不断提到它。

如何创建一个进程

实际上,当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux kernel并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 (address space)。当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。

老进程成为新进程的父进程(parent process),而相应的,新进程就是老的进程的子进程(child process)。一个进程除了有一个PID之外,还会有一个PPID(parent PID)来存储的父进程PID。如果我们循着PPID不断向上追溯的话,总会发现其源头是init进程。所以说,所有的进程也构成一个以init为根的树状结构。

如下,我们查询当前shell下的进程:

代码如下:

root@vamei:~# ps -o pid,ppid,cmd

PID PPID CMD

16935 3101 sudo -i

16939 16935 -bash

23774 16939 ps -o pid,ppid,cmd

我们可以看到,第二个进程bash是第一个进程sudo的子进程,而第三个进程ps是第二个进程的子进程。

还可以用$pstree命令来显示整个进程树:

代码如下:

init─┬─NetworkManager─┬─dhclient

│ └─2*[{NetworkManager}]

├─accounts-daemon───{accounts-daemon}

├─acpid

├─apache2─┬─apache2

│ └─2*[apache2───26*[{apache2}]]

├─at-spi-bus-laun───2*[{at-spi-bus-laun}]

├─atd

├─avahi-daemon───avahi-daemon

├─bluetoothd

├─colord───2*[{colord}]

├─console-kit-dae───64*[{console-kit-dae}]

├─cron

├─cupsd───2*[dbus]

├─2*[dbus-daemon]

├─dbus-launch

├─dconf-service───2*[{dconf-service}]

├─dropbox───15*[{dropbox}]

├─firefox───27*[{firefox}]

├─gconfd-2

├─geoclue-master

├─6*[getty]

├─gnome-keyring-d───7*[{gnome-keyring-d}]

├─gnome-terminal─┬─bash

│ ├─bash───pstree

│ ├─gnome-pty-helpe

│ ├─sh───R───{R}

│ └─3*[{gnome-terminal}]

fork通常作为一个函数被调用。这个函数会有两次返回,将子进程的PID返回给父进程,0返回给子进程。实际上,子进程总可以查询自己的PPID来知道自己的父进程是谁,这样,一对父进程和子进程就可以随时查询对方。

通常在调用fork函数之后,程序会设计一个if选择结构。当PID等于0时,说明该进程为子进程,那么让它执行某些指令,比如说使用exec库函数(library function)读取另一个程序文件,并在当前的进程空间执行 (这实际上是我们使用fork的一大目的: 为某一程序创建进程);而当PID为一个正整数时,说明为父进程,则执行另外一些指令。由此,就可以在子进程建立之后,让它执行与父进程不同的功能。

子进程的终结(termination)

当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在kernel里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为>0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从kernel中取出子进程的退出信息,并清空该信息在kernel中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。

当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在kernel中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。

进程与线程(thread)

尽管在UNIX中,进程与线程是有联系但不同的两个东西,但在Linux中,线程只是一种特殊的进程。多个线程之间可以共享内存空间和IO接口。所以,进程是Linux程序的唯一的实现方式。

linux端口是什么服务,LINUX的端口和服务有什么关系相关推荐

  1. linux vnc 改端口号,RHEL6下配置vncserver服务(包括修改vnc端口)

    RHEL6下配置vncserver服务(包括修改vnc端口) (2012-04-13 23:36:07) 标签: it 配置完vsftpd后,还必须要开的服务就是vnc啦, 首先,在root用户下利用 ...

  2. linux netstat服务,linux netstat查看服务和端口状态

    netstat可以查看linux系统中正在使用的服务和端口情况 常见参数 -a (all)显示所有选项,默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相 ...

  3. linux mysql端口启动失败怎么办,Linux下apache mysql等服务修改默认端口后无法正常启动解决办法...

    Linux下apache mysql等服务修改默认端口后无法正常启动解决办法 linux下 apache 等服务修改默认端口后无法正常启动解决办法 服务器上装了两个webserver,一个是nginx ...

  4. linux关闭cups服务 关闭631端口 关闭avahi-daemon服务

    linux系统中打印机使用631端口,进行通信,对于没有打印机的小伙伴关闭这个端口是很有必要的,减少攻击的可能性.这个服务依赖其他服务,所以要一起关闭,防止这个服务被其他服务唤醒. avahi-dae ...

  5. Linux所有服务开放对应端口大全

    LINUX端口详解大全 0|无效端口,通常用于分析操作系统  1|传输控制协议端口服务多路开关选择器  2|管理实用程序  3|压缩进程  5|远程作业登录  7|回显  9|丢弃  11|在线用户  ...

  6. linux系统禁止邮箱服务,Linux禁止smtp发送邮件,禁止25端口,防止垃圾邮件

    有时候,一些网站不小心被黑,导致垃圾邮件泛滥而遭到投诉,这是我们不想遇到的.怎么样在Linux禁止smtp发送邮件,禁止25端口,防止垃圾邮件?我们可以用iptables来实现屏蔽25端口,如果服务器 ...

  7. Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口

    Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口 >>>>>>>>>& ...

  8. linux服务器调用端口超时,Linux服务器可以ping,但是telnet端口超时,网站wget超时,访问超时的解决办法...

    最近无法通过SSH连接Linux服务器,访问该服务器上的HTTP服务也出现异常.可以ping,但是telnet端口超时,网站wget超时,访问超时. 最后排查是内核配置问题 原来是 net.ipv4. ...

  9. linux 查看开放的端口_如何在 Linux 中查看正在使用的端口

    在对网络连接或特定于应用程序的问题进行故障排除时,首先要检查的是应该在系统上实际使用哪些端口以及哪个应用程序正在侦听特定端口.本文会介绍如何使用 netstat , ss 和 lsof 命令找出哪些服 ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续21)
  2. Numpy中矩阵运算
  3. java pathinfo,nginx下支持PATH_INFO的方法实例详解
  4. 用CSS实现首字下沉效果,仿word的首字下沉
  5. 【杂谈】有三AI专业版学习扑克牌上线,一副扑克,看懂AI核心技术
  6. 听说你们找我很久了?
  7. 爱屋及乌 年轻投资者因喜爱Snapchat亏钱也买Snap股票
  8. android上如何写配置文件
  9. 计算机操作系统(10):集群和分布式
  10. Pandas入门3(dtype+fillna+replace+rename+concat+join)
  11. Android Studio Xposed模块编写(二)
  12. 滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条...
  13. 17年,寻找出路的一年
  14. leetcode记录-罗马数字转整数
  15. Docker基础教程
  16. 【分享】VISIO 2003下载
  17. SSD 输入图片尺寸、比例
  18. PPT 不支持打开显示 webp 图片
  19. 华为浏览器如何进入阅读模式_华为浏览器阅读模式 | 手游网游页游攻略大全
  20. Protobuf简单使用

热门文章

  1. 【PMP认证考试之个人总结】第 7 章 项目质量管理
  2. 为了营造一个看代码舒服的氛围,写了获取王者荣耀所有高清皮肤的代码,现在写代码舒心了(中途发现了一个秘密)
  3. 关于云计算必知的关键核心技术
  4. 汽车概论结业报告计算机系,无人驾驶汽车概论
  5. 【模拟集成电路】宽摆幅压控振荡器(VCO)设计
  6. Linux 音频路ucm和pulseaudio
  7. jpg转bmp操作方法
  8. 破解极域(1):专对付极域电子教室的程序——JiYuTrainer
  9. Proxy代理简单使用
  10. NBIOT----BC28模块使用