当前位置: 技术问答>linux和unix
关于Linux下C语言程序的交互式进程管理
来源: 互联网 发布时间:2017-03-11
本文导语: 大家好: 最近在写一个小项目时遇到了一个进程管理的问题。忘高手指教~~ 是这样的:例如我使用system("su");来在命令行中使用su命令,那么运行程序后系统会提示我输入root密码(因为我运行了su)。但...
大家好:
最近在写一个小项目时遇到了一个进程管理的问题。忘高手指教~~
是这样的:例如我使用system("su");来在命令行中使用su命令,那么运行程序后系统会提示我输入root密码(因为我运行了su)。但是这时候我似乎无法在我的程序中继续控制我启动的su这一交互式进程,比如通过我的C程序实现自动输入密码。请问如何管理进程才能实现继续控制我启动的交互式程序呢?比如输入用户名密码什么的?
望不吝赐教~~有代码就更好了~~~~
最近在写一个小项目时遇到了一个进程管理的问题。忘高手指教~~
是这样的:例如我使用system("su");来在命令行中使用su命令,那么运行程序后系统会提示我输入root密码(因为我运行了su)。但是这时候我似乎无法在我的程序中继续控制我启动的su这一交互式进程,比如通过我的C程序实现自动输入密码。请问如何管理进程才能实现继续控制我启动的交互式程序呢?比如输入用户名密码什么的?
望不吝赐教~~有代码就更好了~~~~
|
lz的要求应该可以通过伪终端实现,完全模拟终端输入..
我曾经使用伪终端调用sftp命令
看看APUE中,伪终端一章,有现成的例子
我曾经使用伪终端调用sftp命令
看看APUE中,伪终端一章,有现成的例子
|
使用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
这里是getpass的源码:
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/gen/readpassphrase.c?rev=1.1;content-type=text%2Fx-cvsweb-markup
|
楼主可以试一下execl 函数族。
execl可以执行脚本,你在脚本里面可以实现自动输入用户名和密码的功能
另外 后台这个程序 需要的用户名和密码可以通过参数来传递,可能需要改一下这个后台程序的代码
execl可以执行脚本,你在脚本里面可以实现自动输入用户名和密码的功能
另外 后台这个程序 需要的用户名和密码可以通过参数来传递,可能需要改一下这个后台程序的代码