小编boo*_*666的帖子

unix fork()系统调用什么时候运行?

void child(int pid){
    printf("Child PID:%d\n",pid);
    exit(0);    
}
void parent(int pid){
    printf("Parent PID:%d\n",pid);
    exit(0);
}

void init(){
    printf("Init\n");//runs before the fork
}


int main(){

    init();//only runs for parent i.e. runs once
    printf("pre fork()");// but this runs for both i.e. runs twice
    //why???

    int pid = fork();

    if(pid == 0){
        child(pid); //run child process
    }else{
        parent(pid);//run parent process
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Init
pre fork()Parrent PID:4788
pre fork()Child PID:0
Run Code Online (Sandbox Code Playgroud)

我在Unix操作系统中有一个进程(在我的例子中是Ubuntu).我不能为我的生活理解这是如何运作的.我知道这个fork()函数在两个进程中分割我的程序但是从哪里来?它是否创建了一个新进程并再次运行整个main函数,如果是这样,为什么init()只运行一次和printf()两次?

为什么printf("pre fork()");运行两次,init() …

c unix linux fork

5
推荐指数
1
解决办法
1460
查看次数

Ubuntu + i3lock锁上盖子关闭

当我关闭盖子时,我想锁定我的笔记本电脑,并且无法在Ubuntu 16.04中使用它.

我试过这个https://github.com/ruudud/i3wm-scripts

似乎这是互联网上最常见的解决方案,但它不起作用.

github repo建议在"sleep.target"之前创建一个名为i3lock.service的服务(据我所知).请注意,我不知道那是什么,并希望了解更多相关信息.

我不确定我是否应该只是创建文件,它应该工作,或者它需要一些特殊权限的文件或什么?需要更多细节.

如果此解决方案不正确,是否可以指出更好的解决方案?

先感谢您 :)

ubuntu ubuntu-16.04

4
推荐指数
1
解决办法
2558
查看次数

Clojure NPE主要

我在我的clojure hello世界里得到了这个奇怪的NPE

(ns test-app.core
    (:gen-class))

(defn -main [& args]
    ( (println "Hello")) )
Run Code Online (Sandbox Code Playgroud)

注意(println"Hello")周围的extra().这似乎是问题,如果我删除它就好了.

和程序的输出.请注意,代码实际上打印了"Hello"并且扔了.

Hello
Exception in thread "main" java.lang.NullPointerException
    at test_app.core$_main.doInvoke(core.clj:5)
    at clojure.lang.RestFn.invoke(RestFn.java:397)
    at clojure.lang.Var.invoke(Var.java:411)
    at user$eval5$fn__7.invoke(form-init9064825970813284041.clj:1)
    at user$eval5.invoke(form-init9064825970813284041.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6619)
    at clojure.lang.Compiler.eval(Compiler.java:6609)
    at clojure.lang.Compiler.load(Compiler.java:7064)
    at clojure.lang.Compiler.loadFile(Compiler.java:7020)
    at clojure.main$load_script.invoke(main.clj:294)
    at clojure.main$init_opt.invoke(main.clj:299)
    at clojure.main$initialize.invoke(main.clj:327)
    at clojure.main$null_opt.invoke(main.clj:362)
    at clojure.main$main.doInvoke(main.clj:440)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:419)
    at clojure.lang.AFn.applyToHelper(AFn.java:163)
    at clojure.lang.Var.applyTo(Var.java:532)
    at clojure.main.main(main.java:37)
[Finished in 4.0s with exit code 1]
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么会发生这种情况?

或者更好:这是一个错误或预期的行为?

我假设这是因为列表的第一个arg应该是一个函数的名称,这里是另一个列表:P.但在这种情况下,编译器/运行时不应该给出更好的错误吗?

Thx提前.

java clojure nullpointerexception

3
推荐指数
1
解决办法
193
查看次数

标签 统计

c ×1

clojure ×1

fork ×1

java ×1

linux ×1

nullpointerexception ×1

ubuntu ×1

ubuntu-16.04 ×1

unix ×1