swoole进程树
- 进程:一个程序启动之后就是一个进程了,操作系统也会启动一个主线程,主线程会执行起来。
文档demo
<?php
use Swoole\Server;
// 创建 Server 对象 监听 127.0.0.1:9501 端口
$server = new Server('0.0.0.0', 9501);
$server->set([
'reactor_num' => 1,
'worker_num' => 2
]);
// 监听连接事件
$server->on('Connect', function ($server, $fd) {
echo "client: connected.\n";
});
// 监听数据接收事件
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
echo "收到数据: ".$data."\r\n";
$server->send($fd, "Server接收到了数据: {$data}");
});
// 监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "client close.\n";
});
// 启动服务器
$server->start();
[root@jb51 swoole_learn]# netstat -luntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 7730/pure-ftpd (SER
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1590/sshd
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 19207/docker-proxy
tcp 0 0 0.0.0.0:888 0.0.0.0:* LISTEN 17824/nginx: worker
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 3846/python
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 10305/sendmail: acc
tcp 0 0 0.0.0.0:9501 0.0.0.0:* LISTEN 16608/php
tcp 0 0 0.0.0.0:5672 0.0.0.0:* LISTEN 19227/docker-proxy
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 15141/redis-server
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17824/nginx: worker
tcp6 0 0 :::21 :::* LISTEN 7730/pure-ftpd (SER
tcp6 0 0 :::22 :::* LISTEN 1590/sshd
tcp6 0 0 :::15672 :::* LISTEN 19213/docker-proxy
tcp6 0 0 :::5672 :::* LISTEN 19233/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 1390/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 922/dhclient
udp 0 0 10.0.16.4:123 0.0.0.0:* 655/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 655/ntpd
udp6 0 0 fe80::5054:ff:fec3::123 :::* 655/ntpd
udp6 0 0 ::1:123 :::* 655/ntpd
[root@jb51 swoole_learn]# pstree -ap | grep php
|-php-fpm,24510
| |-php-fpm,22260
| |-php-fpm,24511
| |-php-fpm,24512
| |-php-fpm,24513
| |-php-fpm,24514
| |-php-fpm,24515
| `-php-fpm,27440
| | `-php,16608 tcp.php
| | |-php,16609 tcp.php
| | | |-php,16611 tcp.php
| | | `-php,16612 tcp.php
| | `-{php},16610
| |-grep,17040 --color=auto php
可以看到我们运行的程序的进程ID是16608
[root@jb51 swoole_learn]# ls -al /proc/16608/fd
总用量 0
dr-x------ 2 root root 0 9月 25 11:53 .
dr-xr-xr-x 9 root root 0 9月 25 11:53 ..
lrwx------ 1 root root 64 9月 25 11:54 0 -> /dev/pts/0
lrwx------ 1 root root 64 9月 25 11:54 1 -> /dev/pts/0
lrwx------ 1 root root 64 9月 25 11:54 10 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 9月 25 11:53 2 -> /dev/pts/0
lrwx------ 1 root root 64 9月 25 11:54 3 -> socket:[394583124]
lrwx------ 1 root root 64 9月 25 11:54 4 -> socket:[394583127]
lrwx------ 1 root root 64 9月 25 11:54 5 -> socket:[394583128]
lrwx------ 1 root root 64 9月 25 11:54 6 -> socket:[394583129]
lrwx------ 1 root root 64 9月 25 11:54 7 -> socket:[394583130]
lrwx------ 1 root root 64 9月 25 11:54 8 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 9月 25 11:54 9 -> anon_inode:[signalfd]
swoole
主进程fd目录下存在这么些个文件。
可以看到对应 ipv4
下的一些socket套接字,前面一部分是IP地址,local_address rem_address
是ip和端口构成的地址,st
状态就是0A
是处于监听状态中,对应的十进制就是10
通讯域类型:IPV4
一般我们连接使用AF_INET PF_INET
套接字的类型:TCP
cat /proc/进程id/net/tcp
:打印进程的TCP表
查看unix
域套接字
[root@jb51 swoole_learn]# cat /proc/16608/net/unix
Num RefCount Protocol Flags Type St Inode Path
ffff8bd47861aa80: 00000002 00000000 00010000 0001 01 167684 /var/run/docker/libnetwork/562f822555f8.sock
ffff8bd3fa5b7740: 00000002 00000000 00010000 0001 01 310686178 /usr/local/qcloud/YunJing/conf/ydrpc_1
ffff8bd375ea8440: 00000002 00000000 00010000 0001 01 13352 /run/dbus/system_bus_socket
ffff8bd376423740: 00000002 00000000 00010000 0001 01 31044 /run/containerd/containerd.sock.ttrpc
ffff8bd376421540: 00000002 00000000 00010000 0001 01 31046 /run/containerd/containerd.sock
ffff8bd376768cc0: 00000002 00000000 00010000 0001 01 100592 /tmp/mysql.sock
ffff8bd474f65dc0: 00000002 00000000 00010000 0001 01 13642 /var/run/lsm/ipc/simc
ffff8bd375ea8000: 00000002 00000000 00010000 0001 01 13351 @ISCSID_UIP_ABSTRACT_NAMESPACE
ffff8bd376544000: 00000002 00000000 00010000 0001 01 166343 /var/run/docker/metrics.sock
ffff8bd376769dc0: 00000002 00000000 00010000 0001 01 12881 /var/run/lsm/ipc/sim
ffff8bd3786accc0: 00000002 00000000 00010000 0001 01 48318543 /tmp/php-cgi-74.sock
ffff8bd376768880: 00000002 00000000 00010000 0001 01 12903 /var/run/acpid.socket
ffff8bd376420000: 00000002 00000000 00010000 0001 01 11370 /run/lvm/lvmetad.socket
ffff8bd376421dc0: 00000002 00000000 00010000 0001 01 11131 /run/systemd/private
ffff8bd3fa5b5100: 00000002 00000000 00000000 0002 01 310686176 @/usr/local/qcloud/YunJing/conf/ydrpc_3
ffff8bd376422ec0: 00000002 00000000 00010000 0001 01 11174 /run/lvm/lvmpolld.socket
ffff8bd376422a80: 00000002 00000000 00010000 0005 01 11192 /run/udev/control
ffff8bd375ea9dc0: 00000002 00000000 00010000 0001 01 13350 @ISCSIADM_ABSTRACT_NAMESPACE
ffff8bd3f582d980: 00000002 00000000 00010000 0001 01 26050 /var/run/docker.sock
ffff8bd376547300: 00000002 00000000 00010000 0001 01 168907 /run/containerd/s/f3d9541006d85ff69c496c73d8182939cb475898eff4792f03390b069f48352b
ffff8bd3fa5b4440: 00000002 00000000 00010000 0001 01 69324 /var/run/supervisor.sock.19529
ffff8bd478618440: 00000003 00000000 00000000 0002 01 8396 /run/systemd/notify
ffff8bd478618880: 00000002 00000000 00000000 0002 01 8398 /run/systemd/cgroups-agent
ffff8bd478619540: 00000002 00000000 00010000 0001 01 8409 /run/systemd/journal/stdout
ffff8bd478619980: 00000006 00000000 00000000 0002 01 8412 /run/systemd/journal/socket
ffff8bd478619dc0: 00000011 00000000 00000000 0002 01 8414 /dev/log
ffff8bd376420440: 00000002 00000000 00000000 0002 01 11245 /run/systemd/shutdownd
内容有点多,就显示那么一点。
unix
通信域的一般调用socket
系统函数的时候传入的是AF_LOCAL/AF_UNIX