当前位置: 技术问答>linux和unix
请教:C代码中怎样fork出一个java子进程?
来源: 互联网 发布时间:2015-12-30
本文导语: 有一个C程序也有一个java程序,现在想使得C程序启动时将java程序也起来并且该c程序关闭后java程序也停止。想在c程序里fork一个子进程并由子进程execv java程序, pidChild = fork(); if(0 == pidChild) { char *aszArgs[] = ...
有一个C程序也有一个java程序,现在想使得C程序启动时将java程序也起来并且该c程序关闭后java程序也停止。想在c程序里fork一个子进程并由子进程execv java程序,
pidChild = fork();
if(0 == pidChild)
{
char *aszArgs[] = {"-cp", "/home/test/", "java_serv"};
execv("/usr/lib/java/bin/java", aszArgs);
}
....
可是启动时总是提示:Erro找不到libjre.so(记不清楚具体名字了)
直接在shell下执行
#java java_serv
是能够正常的,应该各路径都没问题。
那位大哥这样搞过?
pidChild = fork();
if(0 == pidChild)
{
char *aszArgs[] = {"-cp", "/home/test/", "java_serv"};
execv("/usr/lib/java/bin/java", aszArgs);
}
....
可是启动时总是提示:Erro找不到libjre.so(记不清楚具体名字了)
直接在shell下执行
#java java_serv
是能够正常的,应该各路径都没问题。
那位大哥这样搞过?
|
看看 ldd /usr/lib/java/bin/java 输出,
然后设定
LD_LIBRARY_PATH=
具体查看man
$man ld.so
然后设定
LD_LIBRARY_PATH=
具体查看man
$man ld.so
|
把java_serv拷贝到当前程序目录,这样试一下
pidChild = fork();
if(0 == pidChild)
{
//char *aszArgs[] = {"-cp", "/home/test/", "java_serv"};
//execv("/usr/lib/java/bin/java", aszArgs);
system("java java_serv");
}
pidChild = fork();
if(0 == pidChild)
{
//char *aszArgs[] = {"-cp", "/home/test/", "java_serv"};
//execv("/usr/lib/java/bin/java", aszArgs);
system("java java_serv");
}
|
char *aszArgs[] = {"-cp", "/home/test/", "java_serv"};
是不是应该这样:
char *aszArgs[] = {"-cp", "/home/test/", "java_serv",0};
是不是应该这样:
char *aszArgs[] = {"-cp", "/home/test/", "java_serv",0};
|
char *aszArgs[] = {"java","-cp", "/home/test/", "java_serv"};
execv("/usr/lib/java/bin/java", aszArgs);
这样试下看看
execv("/usr/lib/java/bin/java", aszArgs);
这样试下看看
|
程序的arg0是程序本身,不要漏了这个。
|
mark
|
C我不熟
学习才是王道
学习才是王道