Nov 20
UPDATE@2014-01-09:注意,在gdb attach成功以后,这个进程会被暂停,可能会导致一些问题。

UPDATE@2017-11-11:用 lsof | grep deleted ,可以看到被删除的问题文件,记住占用该文件的PID, 到 /proc//fd (该进程打开的所有文件,按fd的值命名)下面可以看到这个文件的另一个链接,把这个链接的内容清空,也可以解决。

场景:Linux下,进程 p 打开了文件 f 并在后台持续地往 f 中写入日志。某日发现磁盘空间不够,把 f 删掉了,这时 ls 已经看不到 f 的存在,但是 df 发现磁盘空间占用并未减小,而 lsof 仍然可以看到该文件被占用(并显示一个 "(deleted)" 后缀)。更不幸的是,进程 p 是需要长期驻留在后台运行的,不能直接干掉它。

解决:简单地说就是替进程解决这个文件。

1) 根据链接文件名,可以查到该文件在进程中的 fd :

    $ ls -l /proc/[PID]/fd

2) 通过 gdb 连上该进程(一般需要root权限)

    $ sudo gdb
    (gdb) attach [PID]

3) 清除该文件所占空间

    (gdb) call ftruncate(3, 0)    #这里假定fd = 3
    $1 = 0

这种方式治标,但不治本 —— 随着进程的继续运行,被删掉的 f 仍然会占用越来越多的空间;但是又不能残暴地直接 close(3) ,否则 p 的后续写入操作会出错,可能导致进程报错结束。

但是还是有办法的:

4) 移花接木

    (gdb) call dup(3)
    $2 = 4
    (gdb) call open("/dev/null", 2)    #注:2 = O_RDWR,x86/x86_64/arm上都是这个值。
    $3 = 5
    (gdb) call dup2(5, 3)
    $4 = 3
    (gdb) call close(4)
    $5 = 0

注:未测试该招式是否可能因多线程竞争导致错误。

OVER.
Nov 12

我想写篇日志 不指定

felix021 @ 2013-11-12 15:21 [随想] 评论(4) , 引用(0) , 阅读(19950) | Via 本站原创
从高考完开始,每月保持至少一篇的节奏,终于还是在今年被打破了。幸好3月写得多,我还可以说今年平均每月还有一篇;但是明年恐怕就没这底气了。

其实并不是不想写博客了,只是因为无从下手敲键盘。工作上没什么值得写的事情。没有什么困难的东西,有点新意的也就是象征性地接触了一下以前想搞搞但是一直动力不足的hadoop什么的,安装说明什么的还是不写比较好...

八月以来,拾起三月看断的SICP,陆陆续续地看到了第四章,连自己都有点意外。虽然从书中学到了不少东西,但似乎也没有什么适合总结写下来的,也许是因为还没“悟道”吧,只能先把代码提交到 GitHub ,期望着哪天看完了能写点什么。

这几个月生活的主要亮点之一是买了Kindle Paperwhite以后,看了好多书。历史、哲学、金融、文学,都有涉猎,挺有意思的。最近把《量子物理史话》又看了一遍,然后开始看《明朝那些事儿》。不仅买了很多电子书,还莫名其妙心血来潮买了好多纸质书,其中有几块大部头,比如《30天自制操作系统》、《编译原理》、《什么是数学》……感觉有很多只能拿来垫显示器了,有点囧,尽量看吧。不管怎么说,买了kpw以后增加了自己的阅读量,挺好的,因此在这里顺便强烈推荐一下。

最后征集一下早餐的问题。在吃了两个月华夫饼、接着又泡了两个月永和豆浆粉以后,想换点什么新的、适合在办公室搞定的东西,求推荐……

p.s. 再顺便推荐几本好书吧,Kindle电子书 //亚马逊有Kindle for PC/Mac/iOS/Android

《上帝掷骰子吗:量子物理史话》 ¥2.99

《时间的形状:相对论史话》 ¥5.00

哲学家们都干了些什么? ¥0.99

搞懂金融的第一本书 ¥3.99

重说中国近代史 ¥1.60

明朝那些事儿(1-7套装) ¥15.00
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]