当前位置: 首页 > 面试题库 >

使C fork代码适应Java程序

章远航
2023-03-14
问题内容

我正在尝试使用Java创建一个小程序来分叉两个新的子进程。它是针对初学者的编程课程的,他们的教程都使用C语言编写,因此,我正在寻求一些帮助,以了解此技巧,以及将其适应基于Java的程序的最佳方法(最终在它)。

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main()
{
pid t pid;

    /*fork a child process*/
    pid = fork();

    if (pid < 0) { /*error occurred*/
        fprintf(stderr, "Fork Failed");
        return 1;
    }
    else if (pid == 0) {/*child process */
        execlp("/bin/ls", "ls", NULL); 
    }
    else { /*parent process*/
        /*parent will wait for the child to complete */
        wait(NULL);
        printf("Child Complete");
    }
    return 0;
}

更新:

我应该给每个子进程及其父进程附加一个ID,在子进程执行时打印信息,并在终止时打印终止通知。现在,我看到上面的这段代码列出了当前目录的内容,并在进程终止时显示“
Child Complete”。列出整个目录是否被视为一个过程?如果是这样,第二个新子进程将在哪里/如何出现?


问题答案:

在Java中,可能看起来像-

public static void main(String[] args) {
    try {
        Process p = Runtime.getRuntime().exec("/bin/ls");
        final InputStream is = p.getInputStream();
        Thread t = new Thread(new Runnable() {
            public void run() {
                InputStreamReader isr = new InputStreamReader(is);
                int ch;
                try {
                    while ((ch = isr.read()) != -1) {
                        System.out.print((char) ch);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();
        p.waitFor();
        t.join();
        System.out.println("Child Complete");
    } catch (Exception e) {
        e.printStackTrace();
    }
}


 类似资料:
  • 我只是在看android逆向工程教程,我注意到他们中的大多数人在反编译apk后修改smali代码而不是实际的java源代码,这是有原因的吗? 感谢您的帮助。 谢啦

  • 问题内容: 我正在尝试将Java应用程序分发给OS X用户。我不使用Mac商店-可以通过我自己的网站进行分发。无论我如何尝试,OS X的Gatekeeper都会拒绝该应用程序。 这是我的方法: (1)像往常一样构建应用程序,获取一个JAR文件 (2)按此处所述使用:https : //docs.oracle.com/javase/7/docs/technotes/guides/jweb/packa

  • 以便在我的应用程序中使用它。我正在测试一个原生C++Android Studio模板项目。 我已经在GitHub上上传了完整的项目供参考:https://GitHub.com/jacobkrieg10/javacppnewexample 还有,下面是我认为需要注意的项目中的相关文件: nativelibrary.java: cmakelists.txt: 注意,Native-lib.cpp只是模板

  • 问题内容: 基本上,我想做两件事: 我想知道是否可以使用Java代码运行Java代码。 如果可能的话,如何在屏幕上显示输出?(无论是常规输出还是错误或异常) 我知道这是可能的,因为我的一位前辈已经做到了,但是我不知道他是如何做到的。也许他使用了Java的内置类之一。 注意:用户将代码写入一些文本文件中,然后将文件内容存储在某个变量中,然后也许运行该代码。 问题答案: 是的,有可能。 步骤1:编译代

  • 问题内容: 我想知道如何在Java中运行PHP代码。使用ScriptEngine,我可以运行JavaScript: 为此,我导入了库。我相信要运行PHP,我必须导入一个类似的库,并将上面代码的第三行更改为extension 。不幸的是,我不知道这是哪个库。我已经用Google搜索并找到了答案,并遇到了PHP / Java Bridge库,但是我认为这并不是我要找的,因为它专注于通过PHP运行Jav

  • 问题内容: 我有一个我想混合使用Java和Scala源代码的应用程序(实际上是将Java应用程序迁移到Scala的应用程序,但一次)。 我可以在IDE中很好地完成这项工作。但是我不确定如何使用Maven做到这一点- scalac可以编译Java和Scala交织在一起,但是如何为模块设置Maven? 另外,我的Scala源代码是否必须与Java文件夹不同? 问题答案: 使用maven scala插件