Linux环境下进程之间的通信与同步

Linux系统上运行有多个进程,其中许多都是独立运行。然而,有些进程必须相互合作以达成预期目的,因此彼此间需要通信和同步机制。

读写磁盘文件中的信息是进程间通信的方法之一。可是,对许多程序来说,这种方法既慢又缺乏灵活性。因此,像所有现代UNIX实现那样,Linux也提供了丰富的进程间通信(IPC)机制,如下所示:

信号(signal):用来表示事件的发生。

管道和FIFO:用于在进程间传递数据。

套接字:供同一台主机或是联网的不同主机上所运行的进程之间传递数据。

文件锁定:为防止其他进程读取或更新文件内容,允许某进程对文件的部分区域加以锁定。

消息队列:用于在进程间交换信息(数据包)

信号量(semaphore):用来同步进程动作。

共享内存:允许两个及两个以上进程共享一块内存。当某进程改变了共享内存的内容时,其他所有进程会立即了解到这一变化。

UNIX系统的IPC机制种类如此繁多,有些功能还互有重叠,部分原因是由于各种IPC机制是在不同的UNIX实现上演变而来的,需要遵循的标准也各不相同。例如,就本质而言,FIFO和UNIX套接字功能相同,允许同一系统上并无关联的进程彼此交换数据。二者之所以并存于现代UNIX系统之中,是由于FIFO来自System V,而套接字则源于BSD。

10个有用的Linux命令行补齐命令

在Linux系统中,输入一个命令,再按两次TAB键,就会列出所有以输入字符开头的可用命令。这并不新鲜,很可能你已经知道了这个。这个功能被称作命令补全。默认情况下,bash命令行可以自动补全文件或目录名称。不过,我们可以使bash命令行补全执行更多的操作,通过补全命令可以让它成就下一个辉煌。

这个教程说明了我们是怎样使用可编程的命令行补全功能(programmable completion)把自动补全的功能应用于选项或者命令行参数。

例如:在输入write 命令之后,如果你按两次TAB按键,自动补全功能会提供执行write操作的列表。

$ write [TAB][TAB]
bala      raj
jason    randy
john      ritu
mayla    thomas
nisha    www-data

在下面的例子中,输入telnet命令将会显示可用了主机名:

$ telnet [TAB][TAB]
localhost  dev-db  fileserver

要让可编程命令补全功能在你的终端起作用 ,你只需要执行/etc/bash_completion即可,就像下面展示出来的操作:

# . /etc/bash_completion

你也可以取消/etc/bash.bashrc(对于Ubuntu Linux 13.04系统)下面的注释,这样,你就可以不需要执行上面的命令了,

enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

如果你没有发现这些代码,也没有找到/etc/bash_completion文件,那么你只需要通过使用apt-get命令来安装bash_completion 包即可。

1、查看现有的bash补全命令

启用可编程的bash命令行补全功能,就可以定义一套bash补全命令。命令行补全可以用来定义bash补全命令。

来看一下现有的bash补全功能,使用完整的命令,如下:

complete -p | less

选项 -p 是可选择的。

2、Bash中标准补全的列表

Bash为linux用户默认提供了下面的标准补全命令。

变量名补全(Variablename completion)
用户名补全(Username completion)
主机名补全(Hostname completion)
Path路径补全(Pathname completion)
文件名补全(Filename completion)
3、为获取命令定义补全命令

使用-c参数定义一个补全命令来获得可使用的命令列表。在下面的例子中,为which命令定义了补全命令,

$ complete -c which

$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)

就像上面看到的,如果按”y”,所有的命令都会显示出来。

4、为获得目录定义补全命令

使用参数d,定义一个只获得目录名称的补全命令,下面的例子中,定义了ls的补全命令

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

$ ls [TAB][TAB]
dir1/          dir2/          dir3/

就像上面看到的,连续按两次TAB,就可以看到目录名称。

5、为获得后台作业名称获得补全命令

通过使用complete命令,把获得job名称作为参数是允许的。参数j用来把job名称作为参数传到命令行,展示如下:

$ jobs
[1]-  Stopped                cat
[2]+  Stopped                sed ‘p’

$ complete -j ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]
cat  sed

IT人员在云计算时代所必备的10项技能

IT专业人员需要不断的学习,才能确保他们的工作能力跟上时代的步伐。那么云计算时代IT专业人员需要具备哪些技能呢?Forbes.com博主Joe McKendrick给我们列举了8项关键技能,我补充2条:

1. 商业和金融技能

技术和商业的融合始终是成功的绝对法宝,尤其在云计算时代。

2. 技术技能

自从有了云计算,企业或者其他机构可以精简他们的IT资源,卸载大部分的日常系统和应用程序管理,但这并不意味着IT将无所事事,你需要有一项编程语言技能,以便能快速构建运行在互联网上的应用程序。

3. 企业架构和业务需求分析

云计算要求IT专业人员最好具备交叉学科知识,特别是面向服务的体系结构。

4. 项目管理技能

企业或者组织不能因为云计算的灵活性而大意,导致项目延期或者目标模糊,这将让云计算的成本优势化为乌有。

5. 合同和供应商的谈判技巧

熟悉服务等级协议(SLA)以及涉及到违反SLA的问题,IT专业人员需要具备一定的合同和供应商谈判的经验。

6. 安全性和遵从性

IT专业人员处理云计算项目时候,必须完全掌握相关行业的安全协议和相关的法规,不论在不在美国。

7. 数据集成和分析技能

IT专业人士可能不是专业的数据科学家,但是你需要帮助这些数据科学家顺利的连接大数据、内部ERP、数据仓库和其他数据系统,除此之外,你还必须与业务那边合作,以便有效利用大数据。

8. 移动应用开发和管理

企业或组织需要了解他们通过云提供给客户的移动体验的效果如何,如何改善。

9. 熟悉开放混合云的知识

IT不是千篇一律的,你的云计算模式也同样如此, IT专业人士需要了解如何在一个开放的平台上构建和扩展公司的云计算基础设施。

10. 了解OpenStack

为了构建上面提到的那种灵活的、安全的、可互操作的云基础设施,IT专业人士必须对所需的技术有很深的理解,OpenStack是关键部分。OpenStack社区汇聚众多云计算开发人员和技术专家团队,由一系列的项目组成,为云基础设施解决方案提供各种组件。