fork

Scala(Java)动态切换工作目录

与世无争的帅哥 提交于 2020-03-12 19:50:16
1、pom文件新增依赖 <dependency> <groupId>com.github.jnr</groupId> <artifactId>jnr-posix</artifactId> <version>3.0.1</version> </dependency> 2、通过POSIXFactory实现工作路径切换 package com.stargraph import jnr.posix.POSIXFactory import scala.io.Source /** * Created by zhoujiamu on 2019/7/26. */ object Test { def main(args: Array[String]): Unit = { POSIXFactory.getPOSIX().chdir("/Users/stargraph/workspace/fork/NlpApi") // /Users/stargraph/workspace/fork/NlpApi 是需要切换的路径 Source.fromFile("run.sh").getLines().foreach(println) } } 上述切换工作目录只在当前的类生效,在其他类不生效,例如下面new HZNLP()时,HZNLP在实例化时候会读取文件,此时还是会出现找不到 object Test { def

GitHub使用手册——fork and pull request

☆樱花仙子☆ 提交于 2020-03-11 13:08:58
一、输入网址进入别人的项目fork 二、将其clone到本机 打开git,进入之前建好本地仓库se2020-git-course 注意clone地址是你刚刚跳转的地址,由于网络原因可能会出现github账户登录界面,不要怕,输入你的账户信息登录即可 三、配置本地库与原始库的关联 进入clone的本地文件夹pp_project 添加与原始库的关联,命名为upstream,此地址是原项目开发者的项目主页上的clone的地址:这是专门用来与主开发者保持相同进度的方法 从原始库中抓取最新的更新 四、在本地修改文件 在本地修改文件完成之后,将其提交到我们自己的fork出来的项目主页。 五、pull request 通过这个命令就可以将我们的修改发送到我们的fork主页上去,但是,这个时候项目的开发者还不知道我们的修改,通过下面的步骤可以通知开发者。 之后添加修改的原因描述,然后就等待主开发者去merge了,之后你会收到邮件。 来源: https://www.cnblogs.com/blog-address/p/12461697.html

网络socket多进程编程之服务器

ぃ、小莉子 提交于 2020-03-10 18:40:12
文章目录 fork系统调用 网络socket多进程编程之服务器代码示例 在写多进程编程之前,我们先了解一下fork系统调用。 fork系统调用 ①Linux内核在启动的最后阶段会创建init进程来执行序/sbin/init,该进程是系统运行的第一个进程,进程号为 1,称为Linux 系统的初始化进程,该进程会创建其他子进程来启动不同写系统服务,而每个服务又可能创建不同的子进程来执行不同的程序。Linux 中维护着一个数据结构叫做 进程表,保存当前加载在内存中的所有进程的有关信息,其中包括进程的 PID(Process ID)、进程的状态、命令字符串等,操作系统通过进程的 PID 对它们进行管理,这些 PID 是进程表的索引。 ②Linux下有两个基本的系统调用可以用于创建子进程:fork()和vfork()。在我们编程的过程中,一个函数调用只有一次返回(return),但由于fork()系统调用会创建一个新的进程,这时会有两次返回。一次返回是给父进程,其返回值是子进程的PID(Process ID),第二次返回是给子进程,其返回值为0。所以我们在调用fork()后,需要通过其返回值来判断当前的代码是在父进程还是子进程运行,如果返回值是0说明现在是子进程在运行,如果返回值>0说明是父进程在运行,而如果返回值<0的话,说明fork()系统调用出错。fork 函数调用失败的原因主要有两个

linux for循环 fork() 产生子进程

爷,独闯天下 提交于 2020-03-09 04:38:10
# include <sys/types.h> # include <unistd.h> # include <stdio.h> int main ( ) {    for ( int i = 0 ; i < 3 ; i ++ )    {    int pid = fork ( ) ;    if ( pid == 0 )    {    printf ( "child\n" ) ;    }    else    {    printf ( "father\n" ) ;    }    }    return 0 ; } 请问输出结果是什么? 初看,想当然认为结果是3对child-father,只是顺序不确定,而且按照Unix环境高级编程中的说法,极端的情况下可能还会出现两个输出的内容相互夹杂的情况。 但是,在Unix测试了一下发现输出竟然有7对child-father。 1.i=0时,父进程进入for循环,此时由于fork的作用,产生父子两个进程(分别记为F0/S0),分别输出father和child,然后,二者分别执行后续的代码,那后续的代码是什么呢?return 0?当然不是,由于for循环的存在,后续的代码是add指令和一条jump指令,因此,父子进程都将进入i=1的情况; 2.i=1时,父进程继续分成父子两个进程(分别记为F1/S1),而i

Linux父子进程

帅比萌擦擦* 提交于 2020-03-08 13:04:00
一、fork函数   Linux系统中创建进程需要消耗较大资源,所以使用fork函数生成一个子进程,子进程的PCB(进程控制块)会复制父进程的数据! #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main(int argc, char const *argv[]) { printf("%d\n", getppid()); pid_t p1 = fork(); if(p1 > 0) {          //父进程 printf("parent pid = %d, p1 = %d\n", getpid(), p1); } else {          //子进程 printf("son pid = %d , ppid = %d, p1 = %d\n", getpid(), getppid(), p1); } return 0; }   这是fork的简单应用,在运行fork()就生成了了一个子进程,父子进程运行的代码是相同的!fork之后的代码在两个进程中运行!    所以fork函数会在父子进程中分别返回,在父进程中返回子进程的pid,而在子进程中会返回0!所以可以根据判断在父子进程中运行不同的代码! 二、僵尸进程和孤儿进程   在进程结束后,Linux系统会自动回收进程消耗的 内存和IO

进程和线程

假装没事ソ 提交于 2020-03-08 12:54:58
进程 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { puts("Begin"); int pid = fork(); if(pid==0) { puts("Child"); }else { puts("Parent"); } puts("End"); } 在执行fork的时候产生一个子进程,根据pid区分是子进程,还是父进程,pid为0,表示子进程。 输出结果为: Begin Parent End Child End 注意点: 1、fork的时候拷贝父进程相同的代码,所以在输出的结果中可以看到两个End。 2、是子进程先输出,还是父进程先输出,依赖于具体的Linux内核。例子中的内核为 root@typhoeus79 ice_test_m guosong]# uname -a Linux typhoeus79 2.6.30-SINA BASE_1 SMP Wed Sep 2 20:30:47 CST 2009 x86_64 x86_64 x86_64 GNU/Linux 写时拷贝(COW) http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html 在Linux程序中,fork(

fork函数详解

六月ゝ 毕业季﹏ 提交于 2020-03-08 12:54:06
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子: /* * fork_test.c * version 1 * Created on: 2010-5-29 * Author: wangth */ #include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d/n",getpid()); printf("我是爹的儿子/n");//对某些人来说中文看着更直白。 count++; } else { printf("i am the

子进程复制了父进程的什么

99封情书 提交于 2020-03-08 12:53:46
如果你对代码段、数据段、栈、堆存放哪些数据还不是很清楚,请先看我写和 Linux 内存管理 。 有时会出现父子进程变量的地址一样,但值不一样。看下面代码: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> main(){ char str[4]="asd"; pid_t pid=fork(); if(pid==0){ str[0]='b'; printf("子进程中str=%s\n",str); printf("子进程中str指向的首地址:%x\n",(unsigned int)str); } else{ sleep(1); printf("父进程中str=%s\n",str); printf("父进程中str指向的首地址:%x\n",(unsigned int)str); } } 输出: 子进程中str=bsd 子进程中str指向的首地址:bfc224dc 父进程中str=asd 父进程中str指向的首地址:bfc224dc 这里就涉及到物理地址和逻辑地址(或称虚拟地址)的概念。 从逻辑地址到物理地址的映射称为地址重定向。分为: 静态重定向--在程序装入主存时已经完成了逻辑地址到物理地址和变换,在程序执行期间不会再发生改变。 动态重定向--程序执行期间完成

Fork(); method in C: determine order

五迷三道 提交于 2020-03-05 17:58:07
问题 I am trying to understand how forks work in C, but I am misunderstanding something somewhere. I came across a test one of my professor gave me last year, but I couldn't reply to it: We have 3 tasks (process or threads), with the following pseudo-code: Th1 { display "Hello 1" } Th2 { display "Hello 2" } Th3 { display "Hello 3" } main() { Fork(Th1);Fork(Th2);Fork(Th3); } The question was: Which is the order of the execution of these tasks? Why? How can I reply to this? Is there any guide or any

Fork(); method in C: determine order

耗尽温柔 提交于 2020-03-05 17:56:19
问题 I am trying to understand how forks work in C, but I am misunderstanding something somewhere. I came across a test one of my professor gave me last year, but I couldn't reply to it: We have 3 tasks (process or threads), with the following pseudo-code: Th1 { display "Hello 1" } Th2 { display "Hello 2" } Th3 { display "Hello 3" } main() { Fork(Th1);Fork(Th2);Fork(Th3); } The question was: Which is the order of the execution of these tasks? Why? How can I reply to this? Is there any guide or any