Linux进程管理之会话控制
Linux 的进程管理不仅仅是用来允许用户管理进程,也包括将多个进程分配到会话中,通过控制会话的有效使用,可以优化系统的运行效率,提高资源的利用率,而会话控制就是这一过程当中的核心内容。
会话控制就是将多个进程分配到不同的会话,每一个会话就像一个“虚拟操作系统”,提供给用户独有的操作空间,独立的记录文件,以及自己的一套程序和变量,在被分配进某一个会话中的进程,可以获取独立的认证等级,以此获得不同的权限能力。
因为每一个会话都是一个拥有独立资源的“虚拟操作系统”,所以非常重要的一点就是用户的资源和私有文件得到保护,只有相应会话中的进程才有权限读取到这部分文件,这保证了不同的会话可以独立的运行,不互相干扰。而且这也能够有效的减少不同进程之间的竞争,保护系统的稳定性。
另外,会话控制还能够支持用户账户不同时存在于系统中,而用户账户引发的安全性问题也可以得到有效解决,因为用户之间的权限不能互相混淆,每个会话都是受到完善保护的,而且使用会话控制,进程管理过程也变得更简单高效了,此外会话控制还支持自动断开用户的会话,从而减少进程的开销和资源的占用。
总的来说,会话控制是一种非常重要的Linux 进程管理技术,不仅可以提供给用户一个安全可靠的操作环境,而且也能有效的优化系统运行效率,提高系统可靠性。因此Linux 的进程管理中会话控制几乎可以说是一项基础性技术,高效的运行和安全的系统稳定取决于会话控制的有效实施。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
高性能计算 为什么 linux

Linux成为超级计算机操作系统最佳选择的功能特性:1. Linux的模块化特性门外汉可能认为典型的Linux是由许多很小的基本组件即模块构成的。 每个模块执行不同的专门功能。 这些基本组件协同工作,让操作系统得以顺畅运行。 Linux的这种模块化特性方便了所有人,无论他们是普通的Linux用户,还是超级计算机管理员——可以改动操作系统,以适合自己的需求。 其他的操作系统都无法提供这种程度的定制性,尤其是Windows。 因而,可以对Linux进行改动,以便用在超级计算机上,实现专门的目的,尤其是增强性能或提高能效等。 如今,大多数超级计算机都采用了经过改动的Linux内核。 2. Linux内核的通用性Linux内核具有尽可能强的通用性。 这意味着,只要编写单一的源代码,既可以在大型超级计算机上运行,也可以在小型设备、甚至手持装置上运行。 无论是在大型系统上还是在小型系统上,如何使用Linux,这完全取决于用户。 也不需要为了可以在更大或更小的系统上运行而对内核进行根本性、重大的改变。 通常来说,Linux内核既可以配置成2MB这么小,也可以配置成1GB或1TB这么大,不需要花很多的时间和很大的精力。 3. 可扩展性按照定义,可扩展性是指服务器适应更庞大负载的能力。 可以直接把可扩展性看成是衡量效率和性能的一个尺度。 系统必须具有极高的可扩展性,那样添加新服务器应该不费吹灰之力。 Linux具有极高的可扩展性,因为它能够相当轻松地适应新的、更大的负载。 这就是为什么你能发现Linux在超级计算机上运行,而安卓(使用Linux内核)在手机、冰箱、甚至微波炉上运行!4. 开源性Linux是完全开源的自由软件,一整套源代码完全开放。 这意味着,超级计算机管理员能够对这款操作系统随意进行定制。 此外,万一超级计算机上出现性能故障或安全漏洞等,管理员可以随时改动代码,以获得最大的性能和最高的安全性(或实现其他任何目的),而不是等专有操作系统公司发布安全补丁。 超级计算机力求实现性能最大化。 通常,超级计算机被分配的任务要求以非常高的速度来处理计算任务。 相比之下,Windows有众多没有必要的无关进程,只会拖累超级计算机的性能。 不过,由于Windows是专有的操作系统,无法改动代码以消除没有必要的进程。 至于Linux,完全可以改动代码,消除无必要的进程,因而为计算机提升性能。 5. 社区支持作为开源操作系统,Linux得到了社区的大力支持,这是其他任何一款操作系统所无法比拟的。 6. 成本低说到像超级计算机这样的庞大设备,成本可能是个大问题。 在超级计算机上部署Linux具有成本效益,因为Linux完全不用支付特许使用费。 使用Linux作为操作系统的其他理由是,Linux的网络支持功能很好。 添加或删除任何尝试性的网络设备都比较容易。 不需要系统重启!Linux是一款稳定而可靠的操作系统,可以在成本高昂的大型服务器和计算机上运行,没必要担心太多的问题。 最后,Linux来得更安全。
常用网络命令有哪几种 都是什么
计算机网络的主要优点是能够实现资源和信息的共享,并且用户可以远程访问信息。 Linux提供了一组强有力的网络命令来为用户服务,这些工具能够帮助用户登录到远程计算机上、传输文件和执行远程命令等。 本章介绍下列几个常用的有关网络操作的命令: ftp 传输文件 telnet 登录到远程计算机上 r - 使用各种远程命令 netstat 查看网络的状况 nslookup 查询域名和IP地址的对应 finger 查询某个使用者的信息 ping 查询某个机器是否在工作 使用ftp命令进行远程文件传输 ftp命令是标准的文件传输协议的用户接口。 ftp是在TCP/IP网络上的计算机之间传输文件的简单有效的方法。 它允许用户传输ASCII文件和二进制文件。 在ftp会话过程中,用户可以通过使用ftp客户程序连接到另一台计算机上。 从此,用户可以在目录中上下移动、列出目录内容、把文件从远程机拷贝到本地机上、把文件从本地机传输到远程系统中。 需要注意的是,如果用户没有那个文件的存取权限,就不能从远程系统中获得文件或向远程系统传输文件。 为了使用ftp来传输文件,用户必须知道远程计算机上的合法用户名和口令。 这个用户名/口令的组合用来确认ftp 会话,并用来确定用户对要传输的文件可以进行什么样的访问。 另外,用户显然需要知道对其进行ftp 会话的计算机的名字或IP地址。 Ftp命令的功能是在本地机和远程机之间传送文件。 该命令的一般格式如下: $ ftp 主机名/IP 其中“主机名/IP”是所要连接的远程机的主机名或IP地址。 在命令行中,主机名属于选项,如果指定主机名,ftp将试图与远程机的ftp服务程序进行连接;如果没有指定主机名,ftp将给出提示符,等待用户输入命令: $ ftp ftp > 此时在ftp>提示符后面输入open命令加主机名或IP地址,将试图连接指定的主机。 不管使用哪一种方法,如果连接成功,需要在远程机上登录。 用户如果在远程机上有帐号,就可以通过ftp使用这一帐号并需要提供口令。 在远程机上的用户帐号的读写权限决定该用户在远程机上能下载什么文件和将上载文件放到哪个目录中。 如果没有远程机的专用登录帐号,许多ftp站点设有可以使用的特殊帐号。 这个帐号的登录名为anonymous(也称为匿名ftp),当使用这一帐号时,要求输入email地址作为口令。 如果远程系统提供匿名ftp服务,用户使用这项服务可以登录到特殊的,供公开使用的目录。 一般专门提供两个目录:pub目录和incoming目录。 pub目录包含该站点供公众使用的所有文件,incoming目录存放上载到该站点的文件。 一旦用户使用ftp在远程站点上登录成功,将得到“ftp>”提示符。 现在可以自由使用ftp提供的命令,可以用 help命令取得可供使用的命令清单,也可以在 help命令后面指定具体的命令名称,获得这条命令的说明。 最常用的命令有: ls 列出远程机的当前目录 cd 在远程机上改变工作目录 lcd 在本地机上改变工作目录 ascii 设置文件传输方式为ASCII模式 binary 设置文件传输方式为二进制模式 close终止当前的ftp会话 hash 每次传输完数据缓冲区中的数据后就显示一个#号 get(mget) 从远程机传送指定文件到本地机 put(mput) 从本地机传送指定文件到远程机 open 连接远程ftp站点 quit断开与远程机的连接并退出ftp ? 显示本地帮助信息 ! 转到Shell中 下面简单将ftp常用命令作一简介。 启动ftp会话 open命令用于打开一个与远程主机的会话。 该命令的一般格式是: open 主机名/IP 如果在ftp 会话期间要与一个以上的站点连接,通常只用不带参数的ftp命令。 如果在会话期间只想与一台计算机连接,那么在命令行上指定远程主机名或IP地址作为ftp命令的参数。 终止ftp会话 close、disconnect、quit和bye命令用于终止与远程机的会话。 close和disronnect命令关闭与远程机的连接,但是使用户留在本地计算机的ftp程序中。 quit和bye命令都关闭用户与远程机的连接,然后退出用户机上的ftp 程序。 改变目录 “cd [目录]”命令用于在ftp会话期间改变远程机上的目录,lcd命令改变本地目录,使用户能指定查找或放置本地文件的位置。 远程目录列表 ls命令列出远程目录的内容,就像使用一个交互shell中的ls命令一样。 ls命令的一般格式是: ls [目录] [本地文件] 如果指定了目录作为参数,那么ls就列出该目录的内容。 如果给出一个本地文件的名字,那么这个目录列表被放入本地机上您指定的这个文件中。 从远程系统获取文件 get和mget命令用于从远程机上获取文件。 get命令的一般格式为: get 文件名 您还可以给出本地文件名,这个文件名是这个要获取的文件在您的本地机上创建时的文件名。 如果您不给出一个本地文件名,那么就使用远程文件原来的名字。 mget命令一次获取多个远程文件。 mget命令的一般格式为: mget 文件名列表 使用用空格分隔的或带通配符的文件名列表来指定要获取的文件,对其中的每个文件都要求用户确认是否传送。 向远程系统发送文件 put和mput命令用于向远程机发送文件。 Put命令的一般格式为: put 文件名 mput命令一次发送多个本地文件,mput命令的一般格式为: mput 文件名列表 使用用空格分隔的或带通配符的文件名列表来指定要发送的文件。 对其中的每个文件都要求用户确认是否发送。 改变文件传输模式 默认情况下,ftp按ASCII模式传输文件,用户也可以指定其他模式。 ascii和brinary命令的功能是设置传输的模式。 用ASCII模式传输文件对纯文本是非常好的,但为避免对二进制文件的破坏,用户可以以二进制模式传输文件。 检查传输状态 传输大型文件时,可能会发现让ftp提供关于传输情况的反馈信息是非常有用的。 hash命令使ftp在每次传输完数据缓冲区中的数据后,就在屏幕上打印一个#字符。 本命令在发送和接收文件时都可以使用。 ftp中的本地命令 当您使用ftp时,字符“!”用于向本地机上的命令shell传送一个命令。 如果用户处在ftp会话中,需要shell做某些事,就很有用。 例如用户要建立一个目录来保存接收到的文件。 如果输入!mkdir new_dir,那么Linux就在用户当前的本地目录中创建一个名为new_dir 的目录。 从远程机grunthos下载二进制数据文件的典型对话过程如下: $ ftp grunthos Connected to grunthos 220 grunthos ftp server Name (grunthos:pc): anonymous 33l Guest login ok, send your complete e-mail address as password. Password: 230 Guest 1ogin ok, access restrictions apply. Remote system type is UNIX. ftp > cd pub 250 CWD command successful. ftp > ls 200 PORT command successful. l50 opening ASCII mode data connection for /bin/1s. total ll4 rog1 rog2 226 Transfer comp1ete . ftp > binary 200 type set to I. ftp > hash Hash mark printing on (1024 bytes/hash mark). ftp > get rog1 200 PORT command successfu1. 150 opening BINARY mode data connection for rogl (l4684 bytes). # # # # # # # # # # # # # 226 Transfer complete. bytes received in 0.0473 secs (3e + 02 Kbytes/sec) ftp > quit 22l Goodbye. 使用telnet命令访问远程计算机 用户使用telnet命令进行远程登录。 该命令允许用户使用telnet协议在远程计算机之间进行通信,用户可以通过网络在远程计算机上登录,就像登录到本地机上执行命令一样。 为了通过telnet登录到远程计算机上,必须知道远程机上的合法用户名和口令。 虽然有些系统确实为远程用户提供登录功能,但出于对安全的考虑,要限制来宾的操作权限,因此,这种情况下能使用的功能是很少的。 当允许远程用户登录时,系统通常把这些用户放在一个受限制的shell中,以防系统被怀有恶意的或不小心的用户破坏。 用户还可以使用telnet从远程站点登录到自己的计算机上,检查电子邮件、编辑文件和运行程序,就像在本地登录一样。 但是,用户只能使用基于终端的环境而不是X Wndows环境,telnet只为普通终端提供终端仿真,而不支持 X Wndow等图形环境。 telnet命令的一般形式为: telnet 主机名/IP 其中“主机名/IP”是要连接的远程机的主机名或IP地址。 如果这一命令执行成功,将从远程机上得到login:提示符。 使用telnet命令登录的过程如下: $ telnet 主机名/IP 启动telnet会话。 一旦telnet成功地连接到远程系统上,就显示登录信息并提示用户输人用户名和口令。 如果用户名和口令输入正确,就能成功登录并在远程系统上工作。 在telnet提示符后面可以输入很多命令,用来控制telnet会话过程,在telnet联机帮助手册中对这些命令有详细的说明。 下面是一台Linux计算机上的telnet会话举例: $ telnet server. somewhere. com Trying 127.0.0.1… Connected to serve. somewhere. com. Escape character is \?]\. “TurboLinux release 4. 0 (Colgate) kernel 2.0.18 on an I486 login: bubba password: Last login:Mon Nov l5 20:50:43 for localhost Linux 2. 0.6. (Posix). server: ~$ server: ~$ logout Connection closed by foreign host $ 用户结束了远程会话后,一定要确保使用logout命令退出远程系统。 然后telnet报告远程会话被关闭,并返回到用户的本地机的Shell提示符下。 r-系列命令 除ftp和telnet以外,还可以使用r-系列命令访问远程计算机和在网络上交换文件。 使用r-系列命令需要特别注意,因为如果用户不小心,就会造成严重的安全漏洞。 用户发出一个r-系列命令后,远程系统检查名为/etc/的文件,以查看用户的主机是否列在这个文件中。 如果它没有找到用户的主机,就检查远程机上同名用户的主目录中名为.rhosts的文件,看是否包括该用户的主机。 如果该用户的主机包括在这两个文件中的任何一个之中,该用户执行r-系列命令就不用提供口令。 虽然用户每次访问远程机时不用键入口令可能是非常方便的,但是它也可能会带来严重的安全问题。 我们建议用户在建立/etc/和文件之前,仔细考虑r-命令隐含的安全问题。 rlogin命令 rlogin 是“remote login”(远程登录)的缩写。 该命令与telnet命令很相似,允许用户启动远程系统上的交互命令会话。 rlogin 的一般格式是: rlogin [ -8EKLdx ] [ -e char ] [-k realm ] [ - l username ] host 一般最常用的格式是: rlogin host 该命令中各选项的含义为: -8 此选项始终允许8位输入数据通道。 该选项允许发送格式化的ANSI字符和其他的特殊代码。 如果不用这个选项,除非远端的终止和启动字符不是或,否则就去掉奇偶校验位。 -E 停止把任何字符当作转义字符。 当和-8选项一起使用时,它提供一个完全的透明连接。 -K 关闭所有的Kerberos确认。 只有与使用Kerberos 确认协议的主机连接时才使用这个选项。 -L 允许rlogin会话在litout模式中运行。 要了解更多信息,请查阅tty联机帮助。 -d 打开与远程主机进行通信的TCP sockets的socket调试。 要了解更多信息,请查阅setsockopt的联机帮助。 -e 为rlogin会话设置转义字符,默认的转义字符是“~”,用户可以指定一个文字字符或一个\\nnn形式的八进制数。 -k 请求rlogin获得在指定区域内的远程主机的Kerberos许可,而不是获得由krb_realmofhost(3)确定的远程主机区域内的远程主机的Kerberos 许可。 -x 为所有通过rlogin会话传送的数据打开DES加密。 这会影响响应时间和cpu利用率,但是可以提高安全性。 rsh命令 rsh是“remote shell”(远程 shell)的缩写。 该命令在指定的远程主机上启动一个shell并执行用户在rsh命令行中指定的命令。 如果用户没有给出要执行的命令,rsh就用rlogin命令使用户登录到远程机上。 rsh命令的一般格式是: rsh [-Kdnx] [-k realm] [-l username] host [command] 一般常用的格式是: rsh host [command ] command可以是从shell提示符下键人的任何Linux命令。 rsh命令中各选项的含义如下: -K 关闭所有的Kerbero确认。 该选项只在与使用Kerbero确认的主机连接时才使用。 -d 打开与远程主机进行通信的TCP sockets的socket调试。 要了解更多的信息,请查阅setsockopt的联机帮助。 -k 请求rsh获得在指定区域内的远程主机的Kerberos许可,而不是获得由krb_relmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可。 -l 缺省情况下,远程用户名与本地用户名相同。 本选项允许指定远程用户名,如果指定了远程用户名,则使用Kerberos 确认,与在rlogin命令中一样。 -n 重定向来自特殊设备/dev/null的输入。 -x 为传送的所有数据打开DES加密。 这会影响响应时间和CPU利用率,但是可以提高安全性。 Linux把标准输入放入rsh命令中,并把它拷贝到要远程执行的命令的标准输入中。 它把远程命令的标准输出拷贝到rsh的标准输出中。 它还把远程标准错误拷贝到本地标准错误文件中。 任何退出、中止和中断信号都被送到远程命令中。 当远程命令终止了,rsh也就终止了。 rcp命令 rcp代表“remote file copy”(远程文件拷贝)。 该命令用于在计算机之间拷贝文件。 rcp命令有两种格式。 第一种格式用于文件到文件的拷贝;第二种格式用于把文件或目录拷贝到另一个目录中。 rcp命令的一般格式是: rcp [-px] [-k realm] file1 file2 rcp [-px] [-r] [-k realm] file directory 每个文件或目录参数既可以是远程文件名也可以是本地文件名。 远程文件名具有如下形式:rname@rhost:path,其中rname是远程用户名,rhost是远程计算机名,path是这个文件的路径。 rcp命令的各选项含义如下: -r 递归地把源目录中的所有内容拷贝到目的目录中。 要使用这个选项,目的必须是一个目录。 -p 试图保留源文件的修改时间和模式,忽略umask。 -k 请求rcp获得在指定区域内的远程主机的Kerberos 许可,而不是获得由krb_relmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可。 -x 为传送的所有数据打开DES加密。 这会影响响应时间和CPU利用率,但是可以提高安全性。 如果在文件名中指定的路径不是完整的路径名,那么这个路径被解释为相对远程机上同名用户的主目录。 如果没有给出远程用户名,就使用当前用户名。 如果远程机上的路径包含特殊shell字符,需要用反斜线(\\)、双引号(”)或单引号(’)括起来,使所有的shell元字符都能被远程地解释。 需要说明的是,rcp不提示输入口令,它通过rsh命令来执行拷贝。 - Turbolinux 提供稿件
如何以守护进程在linux系统下执行
编写守护进程程序的要点:(1)让程序在后台执行。 方法是调用fork()产生一个子进程,然后使父进程退出。 (2)调用setsid()创建一个新对话期。 控制终端、登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们的影响,方法是调用setsid()使进程成为一个会话组长。 setsid()调用成功后,进程成为新的会话组长和进程组长,并与原来的登录会话、进程组和控制终端脱离。 (3)禁止进程重新打开控制终端。 经过以上步骤,进程已经成为一个无终端的会话组长,但是它可以重新申请打开一个终端。 为了避免这种情况发生,可以通过使进程不再是会话组长来实现。 再一次通过fork()创建新的子进程,使调用fork的进程退出。 (4)关闭不再需要的文件描述符。 子进程从父进程继承打开的文件描述符。 如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。 首先获得最高文件描述符值,然后用一个循环程序,关闭0到最高文件描述符值的所有文件描述符。 (5)将当前目录更改为根目录。 (6)子进程从父进程继承的文件创建屏蔽字可能会拒绝某些许可权。 为防止这一点,使用unmask(0)将屏蔽字清零。 (7)处理SIGCHLD信号。 对于服务器进程,在请求到来时往往生成子进程处理请求。 如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie),从而占用系统资源。 如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。 在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。 这样,子进程结束时不会产生僵尸进程。
发表评论