这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 sockdown,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
降价 - 关闭(2) 一个插座
网络管道 4.2
概要
下架 [ fd [形成一种]]
商品描述
下架 执行 关闭(2) 对其指定的文件描述符之一的系统调用
fd. 可能的值 形成一种 旨在
┌──────────┬────────────────────────────────────── ──────────────────────┐
│writeonly │ 转为只写文件描述符│
│0 │ 转为只写文件描述符│
│writeonly │ 符号同上│
│1 │ 转为只读文件描述符│
│readonly │ 符号同上│
│2│完全关机。 不允许再读或写 │
│完全│象征性同上│
└──────────┴──────────────────────────────────────── ──────────────────────┘
默认值 fd 是 1 (stdout) 和默认值 形成一种 是1。
示例
假设您有一台可以执行服务的机器(在这种情况下是从 ASCII 转换
花哨的附言):
server$ 水龙头 3000 --in --out enscript -2rGhp -
然后你可以用软管连接到它。 然而,第一个例子进入了死锁:
客户端 $ 软管服务器 3000 -in -out \
sh -c " cat blah.txt & cat > blah.ps "
enscript 阻塞等待来自套接字的输入,因为不是所有的客户端
进程已经退出。 虽然 cat blah.txt 已完成,但 cat > blah.ps 尚未完成,并且
在远程 enscript 进程完成写入之前不会完成。 脚本
进程在读取完成之前不会完成写入,但是客户端->服务器一半
套接字仍然打开,直到所有客户端进程都被关闭才会关闭
完毕。 结果是死锁。
所以,我们使用sockdown来关闭一半的管道
客户端 $ 软管服务器 3000 -in -out \
sh -c" ( cat blah.txt ; 袜子 ) & cat > blah.ps "
这样当 cat blah.txt 完成后,一半的套接字被关闭,远程
enscript 进程用完输入,导致它刷新其输出并退出,所以最终
整个烂摊子干净利落地结束。
注意:软管上的 & 是必要的,以防止再次出现死锁。 如果我们简单地使用 ;
为了序列化两个 cat 进程,enscript 可能会填满它的
在第一个 cat 完成之前写入缓冲区导致两个进程阻塞并阻止
第二只猫排空管道。
当然,软管的惯用用法是如此有用,以至于它是一种特殊形式:
客户端 $ 软管服务器 3000 -slave < blah.txt > blah.ps
伊恩·斯特林[电子邮件保护]> 通知我 下架 可以在 Linux 中使用
/过程/PID/fd/ 目录来拆除挂起的网络连接。 我已经使用了这个
我自己在楔形 MOMspider 上。 要尝试此操作,您必须知道程序的 PID 并且
楔形套接字的文件描述符(有时可以通过运行找到 痕迹 并看到
如果程序卡在 读(2) 系统调用)。 如果 PID 是 991 并且套接字的
描述符为 5,您以 root 身份执行此操作:
bash#sockdown 1 2 > /proc/991/fd/5
错误
插座 操作 on 非插座
无效 论点 (见 on 索拉里斯) 这款 fd 您指定的不是指套接字。 这个
当您单独运行 sockdown 时发生(不太可能任何文件描述符
连接到交互式外壳实际上是插座)或者如果你弄脏了你的水龙头/软管
命令并忘记了 DUP(2) 你的描述符之一。
坏 文件 数 你给了它一个错误的文件号 fd. 如果你有足够的技能
实际产生这个错误,你可能知道什么是错的。
如果您遇到任何其他错误,请提示我。
使用 onworks.net 服务在线使用袜子