如何重定向正在运行中的进程

From: http://blog.jianingy.com/node/84

有时我们会突然想把一个正在运行中的程序放到后台去执行。由于事先没有准备,很可能忘记重定向输出到文件或者忘记使用screen、nohup一类的命令来跑。下面介绍一个处理这种问题的小技巧。

  1. 获得程序的进程号(PID)
  2. 使用gdb调试这个进程。(gdb -p xxx)
  3. 通过close系统调用关闭标准输出(STDOUT)或者标准错误(STDERR)
  4. 通过creat系统调用打开一个文件并将其文件描述符通过dup2系统调用复制给标准输出或者标准错误
  5. 退出调试器。现在可以将程序通过“CTRL+z”, “bg”, “disown“放入后台运行了。具体方法请参考: 让程序在后台运行的几个简单方法

详细操作步骤截图如下

nby:~ $ ps awux | grep [t]op
jianingy 4753 0.1 0.0 2308 1008 pts/2 S+ 17:44 0:00 top -b
nby:~ $ gdb -p 4753
GNU gdb (GDB) 7.0

0xb776a424 in __kernel_vsyscall ()
(gdb) call close(1)
$1 = 0
(gdb) call dup2(creat(”/tmp/log”, 0600), 1)
$2 = 1
(gdb) quit

使用本文附件中提供的脚本,可以方便的使用这种方法进行重定向。

参考文献

  1. http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-pr...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值