首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UNIX(进程间通信):01---Linux进程通信方式

Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。...现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵循POSIX标准;2)BSD并不是没有涉足单机内的进程间通信(socket本身就可以用于单机内的进程间通信)。...图一给出了linux 所支持的各种IPC手段,在本文接下来的讨论中,为了避免概念上的混淆,在尽可能少提及Unix的各个版本的情况下,所有问题的讨论最终都会归结到Linux环境下的进程间通信上来。...; 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合...起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

2.6K30

Linux进程通信之Unix套接字(二)

'; $file = 'unix_udp_client'; //创建socket $socket = socket_create(AF_UNIX,SOCK_DGRAM,0); //绑定客户端文件,不绑定则服务端无法给客户端发送消息...socket_bind($socket,$file); $pid = pcntl_fork(); //子进程接收 if($pid == 0) { while (1) {...} if(strncasecmp($data,'quit',4) == 0) { exit(0); } } } //父进程发送...pid=%s\n",$pid); 执行服务端代码php demo29.php,通过ls命令可以看到已经生成文件,并且通过file命令可以看到生成的文件是一个socket文件,通过pstree -ap 查看启动进程...id,通过strace命令监控服务端进程 通过上面的执行结果可以看到,进程之间是可以进行通信的 注意:切记要自行处理生成的socket文件,否则会报address呗占用的错误 本文为北溟有鱼QAQ

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux进程通信之Unix套接字(一)

Linux进程通信之Unix套接字(一) 什么是套接字 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。...一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。...) AF_INET6(IPV6) AF_UNIX(本地通讯协议,一般用于进程通信,不需要经过网卡) 套接字类型 流套接字(SOCK_STREAM),提供一个顺序化的、可靠的、全双工的、基于连接的字节流。...PHP中封装了以socket开头和stream开头的两种函数,都可以实现Unix套接字通信,具体可以查看PHP官方手册 Unix套接字还分无命名的(用于父子、兄弟等有血缘关系进程通信)和命名的(任何进程都可以通信...并且在执行代码时,使用strace命令进行追踪,可以看到,在没有客户端连接时,代码则会在accept进行阻塞,当客户端连接后,代码则会在recvform进行阻塞,等待接收数据 注意 多次启动服务端监听文件时

2.5K30

3.x 在Unix系统上面启动守护进程

12.14 在Unix系统上面启动守护进程 问题 你想编写一个作为一个在Unix或类Unix系统上面运行的守护进程运行的程序。...解决方案 创建一个正确的守护进程需要一个精确的系统调用序列以及对于细节的控制。 下面的代码展示了怎样定义一个守护进程,可以启动后很容易的停止它。 #!...r}'.format(sys.argv[1]), file=sys.stderr) raise SystemExit(1) 要启动这个守护进程,用户需要使用如下的命令: bash % daemon.py...守护进程可以完全在后台运行,因此这个命令会立即返回。 不过,你可以像上面那样查看与它相关的pid文件和日志。...要停止这个守护进程,使用: bash % daemon.py stop bash % (adsbygoogle = window.adsbygoogle || []).push({});

52130

Linux守护进程启动方法

这篇文章主要为大家详细介绍了Linux守护进程启动方法,本文介绍如何将一个 Web 应用,启动为守护进程,感兴趣的小伙伴们可以参考一下 "守护进程"(daemon)就是一直在后台运行的进程(daemon...怎么才能让它变成系统的守护进程(daemon),成为一种服务(service),一直在那里运行呢? 二、前台任务与后台任务 上面这样启动的脚本,称为"前台任务"(foreground job)。...变成守护进程的第一步,就是把它改成"后台任务"(background job)。 $ node server.js & 只要在命令的尾部加上符号&,启动进程就会成为"后台任务"。...三、SIGHUP信号 变为"后台任务"后,一个进程是否就成为了守护进程呢?或者说,用户退出 session 以后,"后台任务"是否还会继续执行? Linux系统是这样设计的。...四、disown 命令 通过"后台任务"启动"守护进程"并不保险,因为有的系统的huponexit参数可能是打开的(on)。 更保险的方法是使用disown命令。

4.4K00

Linux 守护进程启动方法

"守护进程"(daemon)就是一直在后台运行的进程(daemon)。 本文介绍如何将一个 Web 应用,启动为守护进程。 一、问题的由来 Web应用写好后,下一件事就是启动,让它一直在后台运行。...变成守护进程的第一步,就是把它改成"后台任务"(background job)。 $ node server.js & 只要在命令的尾部加上符号&,启动进程就会成为"后台任务"。...三、SIGHUP信号 变为"后台任务"后,一个进程是否就成为了守护进程呢?或者说,用户退出 session 以后,"后台任务"是否还会继续执行? Linux系统是这样设计的。...# 作为前台任务启动 $ forever server.js # 作为服务进程启动 $ forever start app.js # 停止服务进程 $ forever stop Id # 重启服务进程...://localhost:9615 $ pm2 web 十、Systemd 除了专用工具以外,Linux系统有自己的守护进程管理工具 Systemd 。

4.4K50

Linux 守护进程启动方法

Linux 守护进程启动方法 “守护进程”(daemon)就是一直在后台运行的进程(daemon)。 本文介绍如何将一个 Web 应用,启动为守护进程。...变成守护进程的第一步,就是把它改成”后台任务”(background job)。 $ node server.js & 只要在命令的尾部加上符号&,启动进程就会成为”后台任务”。...三、SIGHUP信号 变为”后台任务”后,一个进程是否就成为了守护进程呢?或者说,用户退出 session 以后,”后台任务”是否还会继续执行? Linux系统是这样设计的。...# 作为前台任务启动 $ forever server.js # 作为服务进程启动 $ forever start app.js # 停止服务进程 $ forever stop Id # 重启服务进程...://localhost:9615 $ pm2 web 十、Systemd 除了专用工具以外,Linux系统有自己的守护进程管理工具 Systemd 。

4.9K81

《理解 Unix 进程》笔记-1

UNIX 进程 系统调用 Unix 系统是由用户空间(userland)和内核组成。Unix 内核位于计算机硬件之上,是与硬件交互的中介。...进程Unix 系统的基石,所有的代码都是在进程中运行。 unix 中的进程创建是通过内核系统调用 fork() 实现的。...标准流 每个 Unix 进程都有三个打开的资源,它们是标准输入(STDIN)、标准输出(STDOUT)和标准错误(STDERR)。...进程皆可衍生 衍生是 Unix 编程中最强大的概念之一。fork 系统调用允许运行中的进程以编程的形式创建新的进程。这个新进程和原始进程一模一样。...孤儿进程 当通过终端启动单个进程时,通常只有这个进程向 STDOUT 写入,从键盘获取输入或者侦听 Ctrl+C 已待退出。

86110

UNIX(进程间通信):05---守护进程

守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。...(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。...要注意守护进程与后台运行程序(即加&启动的程序)的区别。...创建守护进程的过程: fork子进程, 父进程退出, 所有工作在子进程中进行形式上脱离了控制终端; 必须 子进程创建新会话, setsid函数, 使子进程完全独立出来, 脱离控制; 必须 改变当前目录为根目录...当然在linux环境下你也可以使用nohup ./a.out &来把a.out作为一个后台执行的服务,将后台执行的一些控制台输出重定向到nohup.out文件中。 ?

74520

UNIX(进程间通信):04---孤儿进程

当一个子进程还在执行时,它的父进程已经退出了,那么这个子进程的退出信息也没有被父进程接收到,如果子进程的退出信息没有被别的进程接收到,那么这个子进程就会变成一个僵尸进程,所以孤儿进程可能会引发僵尸进程。...所以这个子进程必须被其他进程所领养,领养它的进程为1号进程,则它的退出信息会被1号进程所接收。 如果父进程退出,父进程会变成僵尸进程吗?...我们这里再重温下僵尸进程和孤儿进程: 僵尸进程: 一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程进程描述符仍然保存在系统中。...这种进程称之为僵死进程。 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。...孤儿进程是没有父进程进程,孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。

57411

UNIX(进程间通信):03---僵尸进程

僵尸进程 僵尸进程是指一个已经终止、但是其父进程尚未对其进行善后处理获取终止进程的有关信息的进程,这个进程被称为“僵尸进程”(zombie)。...在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位 置,记载该进程的退出状态等信息供其他进程收集。...怎么查看僵尸进程 利用命令ps,可以看到有父进程ID为1的进程是孤儿进程;s(state)状态为Z的是僵尸进程。...getpid(), getppid()); sleep(1); } } } 编译后生成zombie二进制文件,linux...大家可以看到第二个子进程已经变成僵尸进程了(Z+) 僵尸进程的危害 由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束.

69330

UNIX(进程间通信):17 深入理解unix

unixunix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法。...unix域是基于socket通信的一个特例,因为他的实现中使用了socket技术,但是他是基于单个主机上的进程间通信。因为在同一个主机内,所以就少了很多网络上的问题,那就减少了复杂度。...unix域通信本质还是基于内存之间的通信,客户端和服务器都维护一块内存,然后实现全双工通信,而unix域的文件路径,只不过是为了让客户端进程可以找到服务端进程。...就可以实现进程间通信。 ?...使用unix域套接字的三个好处: 1.unix域套接字通常比通信两端位于同一个主机的TCP套接字快出一倍 2.unix域套接字可用于在同一个主机上的不同进程之间传递描述符 3.unix能够提供额外的安全检查措施

1.5K10

Linux如何查看进程、杀死进程启动进程等常用命令

进程 使用kill命令结束进程:kill xxx 常用:kill -9 324 Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:# killall -9 NAME...显示进程 命令:ps 格式:ps [option] 功能:显示系统中进程的信息。包括进程ID、控制进程终端、执行时间和命令。...用户名: 对锁定的用户帐号进行解锁 passwd –d 用户名: 使帐号无口令,即用户不需要口令就能登录系统 例:#usermod -l user2 user1 //把用户user2改名为user1 启动...VSFTP服务 即时启动:/etc/init.d/vsftpd start 即时停止:/etc/init.d/vsftpd stop 开机默认VSFTP服务自动启动: 方法一:(常用\方便) [root...etc]# chkconfig vsftpd on (执行ON设置) 方法二: 修改文件 /etc/rc.local , 把行/usr/local/sbin/vsftpd & 插入文件中,以实现开机自动启动

7.6K22

UNIXLinux信号

1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。...登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个Session。...当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。...不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也能继续下载。 此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。...如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程

4.1K40

UNIX(进程间通信):08 管道通信

匿名管道 匿名管道是进程间通信中比较简单的一种,他只用于有继承关系的进程,因为匿名,非继承关系的进程无法找到这个管道,也就无法完成通信,而有继承关系的进程,是通过fork出来的,父子进程可以获得得到管道...进一步来说,子进程可以使用继承于父进程的资源,但是他无法使用叔伯进程的资源。管道通信的原理如下: ? 父子进程通过fork后,子进程继承了父进程的文件描述符。所以他们指向同一个数据结构。...父子进程通常只需要单向通信,父子进程各关闭自己的一端。当父子进程对管道进程读写的时候,操作系统会控制这一切,包括数据的读取和写入,进程的挂起和唤醒。...,则read返回0 如果所有管道读端对应的文件描述符被关闭,则write操作会产生信号SIGPIPE,进而可能导致write进程退出 当要写.入的数据量不.大于PIPE_BUF时,linux将保证写.入的原...当要写.入的数据量.大于PIPE_BUF时,linux将不再保证写.入的原.子性。

1K20

UNIX(进程间通信):10 消息队列

一、消息队列的特点 1.消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识. 2.消息队列允许一个或多个进程向它写入与读取消息. 3.管道和命名管道都是通信数据都是先进先出的原则...msgflag: MSG_NOERROR:若返回的消息比nbytes字节多,则消息就会截短到nbytes字节,且不通知消息发送进程....IPC_NOWAIT:调用进程会立即返回.若没有收到消息则返回-1. 0:msgrcv调用阻塞直到条件满足为止. 在成功地读取了一条消息以后,队列中的这条消息将被删除。...msgid == -1) { printf("creat error\n"); return -1; } //以当前进程类型...可在这2个进程中分别创建2个线程,分别负责收和发,就完成了进程间的通信。

91631

UnixLinux区别

LinuxLinux是由芬兰计算机科学家Linus Torvalds在1991年创建的。它是作为一个免费、开放源代码的Unix克隆而开始的。...LinuxLinux使用Linux内核,这是由Linus Torvalds及其他贡献者开发的。Linux内核是开源的,这使得Linux系统能够在各种硬件平台上运行。...开源性质Unix: 大多数商业Unix版本是闭源的,需要购买许可证使用。LinuxLinux是开源的,其源代码可以免费获取、使用、修改和分发。这也促使了许多不同的Linux发行版的出现。...用户群体Unix: 主要在商业和企业环境中使用,通常用于大型服务器和工作站。Linux: 除了服务器和工作站,还广泛用于个人计算机、嵌入式系统和移动设备。Linux也在云计算环境中得到了广泛应用。...Linux: 大多数Linux发行版遵循POSIX标准,因此在命令行方面与Unix相似,但也有一些特定的命令和工具。

17010

unix环境高级编程(中)-进程

目录 前言 进程环境 进程控制 进程关系 信号 线程 线程控制 高级IO 进程间通信 网络间进程通信:套接字 高级进程间通信 前言 笔者将《unix环境高级编程》主要内容总结为三篇:文件篇,进程篇,高级...本文是unix环境高级编程系列文章第二篇:进程篇。...以及unix底层的数据结构如何建立他们之间的关系 信号 主要介绍信号的概念,如何设置信号处理函数,收到信号导致系统中断的调用以及能自动重启的调用。...可执行文件将此启动例程指定为程序的起始地址(gcc设置) 启动例程从内核取得命令行参数和环境变量 上述工作准备就绪,开始执行main函数 2....id为1的进程通常是init进程,是普通进程。以超级用户运行。文件为/sbin/init。负责在自举内核后启动unix系统。

2.1K42
领券