导航:首页 > 操作系统 > linux获取子进程

linux获取子进程

发布时间:2022-09-06 04:33:10

‘壹’ java获取linux下正在运行的应用程序的数量

Java 可以通过 Runtime 调用Linux命令,形式如下:

Runtime.getRuntime().exec(command)
但是这样执行时没有任何输出,因为调用 Runtime.exec
方法将产生一个本地的进程,并返回一个Process子类的实例(注意:Runtime.getRuntime().exec(command)返回的是
一个Process类的实例)该实例可用于控制进程或取得进程的相关信息。

由于调用 Runtime.exec
方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过
Process.getOutputStream(),Process.getInputStream(),
Process.getErrorStream() 方法重定向给它的父进程了。

用户需要用这些stream来向子进程输入数据或获取子进程的输出,下面的代码可以取到 linux 命令的执行结果:

try {
String[] cmd = new String[]{”/bin/sh”, “-c”, ” ls “};
Process ps = Runtime.getRuntime().exec(cmd);

BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(”\n”);
}
String result = sb.toString();

System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
借鉴于:http://www.linuxidc.com/Linux/2010-07/27376.htm

‘贰’ linux 如何获得正在运行程序的pid

你用了pthread库,在链接的时候要加上
gcc
-lpthread
1.c
-o
1
即可
子进程(对应pid==0语句)调用pthread接口创建线程,在县城内将value赋值5,然后打印
child:
value=%d\n
此时value
=
5
父进程
(对应
pid
>
0
语句),等待子进程执行完成后(wait语句),打印parent:
value=%d\n
,此时value
=
0
对于你补充问题的回答:
线程是在子进程里创建的,它只改变了子进程的value
(子进程和父进程的value处在不同的地址空间,互相没有关系,而子进程和它所创建的线程是在同一地址空间,所以线程可以改变子进程的value),
父进程没有创建线程,因此它的值不会被改变。

‘叁’ linux 如何得到一个进程的子进程

调用 fork 函数。

‘肆’ Linux中的进程问题,以及exit(0); 和sleep(5);

俺跟你解释一下:

fork是一个跟当前进程一模一样的进程,包括当前进程的所有状态(有特殊设置就不会拷贝,如文件标识)。子进程如果不设置新的执行程序,会继续执行fork之后的代码,注意前面提过的跟父进程一模一样的代码。

pid==0代表是子进程,因此子进程会执行这段代码:

if(pid==0)
{
printf("child!!! ");
//这里会造成子进程的主线程,main执行线程,阻塞5秒
sleep(5);
exit(0);
}

pid > 0 代表是父进程,因此父进程继续执行的代码为:

if(pid>0)
{
//此处必须等待子进程结束,子进程调用exit(0),时会通知父进程继续执行
//属于进程间通讯、同步的一个手段之一。那子进程等待5秒被唤醒,执行exit(0)
//父进程收到通知,获取到子进程的退出状态,继续就会printf,基本也就是等待了5秒
//然后父进程return0等价于exit(0)正常结束
wait(NULL);//不这样写,父进程直接结束可能会产生僵尸进程,也可能变成孤儿进程由
//由init进程领养,并正确结束。通用的做法必须wait。根据操作系统以及版本不同处理
//方式可能不一样,如aix可能就会有僵尸进程产生
printf("father!!! ");
}

‘伍’ linux系统中创建子进程的程序,不知道该用getpid()还是getppid()

父进程返回的是是子进程号。他再getppid就成了他父亲的了。他这里是要返回他儿子的进程号。他儿子返回的是0,getppid得到他父亲的进程号。所以只有在父亲这里才可以得到子进程号。

‘陆’ Linux中子进程执行exec后,父进程还需要再wait这个子进程吗

wait子进程是为了当子进程结束后,获取子进程的相关运行信息和替子进程收尸(也就是清理子进程的PCB),不然子进程会变成僵尸进程,占用系统空间。exec只是把子进程的代码段替换掉,其他的段不变。如果父进程先于子进程结束,init进程会变成子进程的父进程,子进程结束后init会负责清理PCB,但是如果父进程晚于子进程结束,并且父进程也没有wait子进程,那么子进程结束后,它的PCB既不会被父进程清理也不会被init进程清理,浪费系统资源。

‘柒’ Linux中如何在子进程获取父进程的pid

getppid() 获取父进程 id,
getpid() 获取当前进程 id.

比如
int main()
{
int pid = fork();
if (pid == 0)
{
// child
printf ("ParentID is %d\n", getppid());
}
esle
{
printf("I'm parent, id %d\n", getpid());
wait(NULL);
}
return 0;
}

再就是程序编译没错,但是运行时出现“实时信号 2”
没有源码,谁也帮不上你。 你可以用 gdb去调试。

‘捌’ linux c语言调用shell 怎样得到该子进程的pid(就是被调用的那个shell的pid)

第一种方法:执行完shell后用$!命令获得pid
第二种方法:在shell中加入echo $$可以把它的pid输出

‘玖’ 请教Linux下面 使用execl 调用一个进程如何获得这个子进程得ID

execl的man手册第一句话就说了:The exec() family of functions replaces the current process image with a new process image.你的整个进程空间都已经被替换成新的进程了,哪儿还有下面?下面已经太监了,不会再有了。所有execl之后的代码都已经无法执行

‘拾’ linux中,如何查看某个进程号下面有哪些子进程

ps -lax查看进程,以及父进程。找到自己需要查看的进程的pid,然后

ps --ppid ****

阅读全文

与linux获取子进程相关的资料

热点内容
pdf打印底色去掉 浏览:443
java快递接口 浏览:385
哪个app可以教新爸爸 浏览:210
如何查看服务器系统版本信息 浏览:524
成都市土地出让金算法 浏览:702
钢筋加密标记 浏览:575
ps中扩展功能在文件夹的什么位置 浏览:903
双极压缩机为什么要先高压 浏览:527
苹果手机服务器填什么 浏览:832
android移动动画效果 浏览:691
电子和服务器是什么意思 浏览:691
phpurl中文乱码问题 浏览:893
程序员那么可爱大结局陆漓产子 浏览:538
java如何从云服务器读取本地文件 浏览:923
压缩空气软管制作方法 浏览:912
天河三号算法 浏览:924
php队列教程 浏览:632
洪水命令 浏览:530
安卓怎么弄成苹果在线 浏览:435
谷歌web服务器地址 浏览:900