日期:2014-05-16  浏览次数:20694 次

关于Linux下C语言程序的交互式进程管理
大家好:
  最近在写一个小项目时遇到了一个进程管理的问题。忘高手指教~~
  是这样的:例如我使用system("su");来在命令行中使用su命令,那么运行程序后系统会提示我输入root密码(因为我运行了su)。但是这时候我似乎无法在我的程序中继续控制我启动的su这一交互式进程,比如通过我的C程序实现自动输入密码。请问如何管理进程才能实现继续控制我启动的交互式程序呢?比如输入用户名密码什么的?
  望不吝赐教~~有代码就更好了~~~~

------解决方案--------------------
使用expect脚本实现你的需求
------解决方案--------------------
su 调用了getpass, getpass会确保从终端读入而不是从管道读入,所以一般是不能自动输入密码的,所以需要利用expect脚本工具。
这里是getpass的源码:
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/gen/readpassphrase.c?rev=1.1;content-type=text%2Fx-cvsweb-markup
------解决方案--------------------
lz的要求应该可以通过伪终端实现,完全模拟终端输入..
我曾经使用伪终端调用sftp命令
看看APUE中,伪终端一章,有现成的例子
------解决方案--------------------
楼主可以试一下execl 函数族。
execl可以执行脚本,你在脚本里面可以实现自动输入用户名和密码的功能

另外 后台这个程序 需要的用户名和密码可以通过参数来传递,可能需要改一下这个后台程序的代码