当前位置: 技术问答>linux和unix
请问Linux中如何用程序A启动程序B,使程序B在后台运行?
来源: 互联网 发布时间:2015-08-23
本文导语: 请问如何用程序A启动程序B,使程序B在后台运行? 如题,是在A中处理还是在B中处理? | /* A */ #include #include #include #include int main(int argc,char** argv) { int pid_t = fork(); switch( ...
请问如何用程序A启动程序B,使程序B在后台运行?
如题,是在A中处理还是在B中处理?
如题,是在A中处理还是在B中处理?
|
/* A */
#include
#include
#include
#include
int main(int argc,char** argv)
{
int pid_t = fork();
switch( pid_t )
{
case 0:
system("/home/test/b");
break;
default:
break;
}
/* if you want,please add the wait function here */
exit(0);
}
#include
#include
#include
#include
int main(int argc,char** argv)
{
int pid_t = fork();
switch( pid_t )
{
case 0:
system("/home/test/b");
break;
default:
break;
}
/* if you want,please add the wait function here */
exit(0);
}
|
//从子程序中生成一个应用子进程
int ForkMyApp(const char *szcpAppFileName)
{
pid_t pid, pid_child;
int r_num;
if((pid = fork()) == 0)
{
//在子进程当中
pid_child = getpid();
// 准备命令行参数
char * _argv[64];
int i = 0;
memset ( (void *)_argv, 0, sizeof(_argv) );
//可执行名称
char szappname[250];
char szapppath[200];
char *pcEnv = 0;
memset(szapppath, 0, 200);
memset(szappname, 0, 250);
//以下这行是指明了应用的全路径
sprintf ( szappname, "%s", szapppath);
_argv[i++] = szappname;
errno = 0;
printf("we will execv programe name = %s !n", szappname);
int ret = execv ( szappname, _argv );
if ( -1 == ret )
{
printf ( "exec child process[%s ", szappname );
printf ( "] failedn, command = %s ,errno = %dn", _argv[0], errno );
exit ( errno );
}
// 永远也不可能执行到这行代码
return 1;
}
return 1;
}
int ForkMyApp(const char *szcpAppFileName)
{
pid_t pid, pid_child;
int r_num;
if((pid = fork()) == 0)
{
//在子进程当中
pid_child = getpid();
// 准备命令行参数
char * _argv[64];
int i = 0;
memset ( (void *)_argv, 0, sizeof(_argv) );
//可执行名称
char szappname[250];
char szapppath[200];
char *pcEnv = 0;
memset(szapppath, 0, 200);
memset(szappname, 0, 250);
//以下这行是指明了应用的全路径
sprintf ( szappname, "%s", szapppath);
_argv[i++] = szappname;
errno = 0;
printf("we will execv programe name = %s !n", szappname);
int ret = execv ( szappname, _argv );
if ( -1 == ret )
{
printf ( "exec child process[%s ", szappname );
printf ( "] failedn, command = %s ,errno = %dn", _argv[0], errno );
exit ( errno );
}
// 永远也不可能执行到这行代码
return 1;
}
return 1;
}
|
在A中,B中都可以的,看你的要求了
A中system("/home/test/b $");
B中用fork
A中system("/home/test/b $");
B中用fork
|
fork(), setsid(), exec()这样就行了。