Articles of 进程

使用exec在新进程中执行系统命令

我试图产生一个执行系统命令的进程,而我自己的程序仍在继续,两个进程将并行运行。 我正在linux上工作。 我在网上查询,听起来像我应该使用exec()家庭。 但是它不能像我所期望的那样工作。 例如,在下面的代码中,我只看到“之前”被打印,而不是“完成”。 我很好奇,如果我什么都没有问题? #include <unistd.h> #include <iostream> using namespace std; main() { cout << "before" << endl; execl("/bin/ls", "/bin/ls", "-r", "-t", "-l", (char *) 0); cout << "done" << endl; } [UPDATE] 谢谢你们的评论。 现在我的程序看起来像这样。 一切工作正常,除了最后,我不得不按下完成程序。 我不知道为什么我要按最后input? #include <unistd.h> #include <iostream> using namespace std; main() { cout << "before" << endl; int pid […]

为什么在Linux中I / O是不可中断的?

它背后的理由是什么? 如果允许进行I / O的进程处理信号,会有什么坏结果呢?

在Python中查找Linux中特定PID的命令

我想知道是否有可能找出PID设置的“命令”。 当我说命令的时候,我的意思是当你在linux shell中运行“top”命令时,在最后一列中看到的内容。 当我有一个特定的PID时,我想从Python获取这些信息。 任何帮助将是伟大的。 谢谢。

为什么从孩子getppid()返回1

我正在运行程序 #include<stdio.h> #include <unistd.h> main() { pid_t pid, ppid; printf("Hello World1\n"); pid=fork(); if(pid==0) { printf("I am the child\n"); printf("The PID of child is %d\n",getpid()); printf("The PID of parent of child is %d\n",getppid()); } else { printf("I am the parent\n"); printf("The PID of parent is %d\n",getpid()); printf("The PID of parent of parent is %d\n",getppid()); } } […]

用C在Linux的后台启动一个进程

我想在这里做一些有点奇怪的事情。 我需要从deamon开始一个进程logcat,它将在后台运行并打印到terminal,而不用控制stdin。 logcat是非常理想的logcat,它将打印日志消息,同时允许用户input标准命令并从shell初始化程序。 这里是我到目前为止的守护进程的代码。 程序,logcat,启动并显示日志消息,但我不能input任何命令到标准input,因为它似乎程序已经控制了标准input。 int main ( int argc, char** argv, char** env ) { int fd; if ((fd = open("/dev/console", O_RDWR)) < 0) { fd = open("/dev/null", O_RDWR); } printf("THIS IS A TEST\n"); dup2(1, fd); dup2(2, fd); pid_t childpid = fork(); if(childpid == -1) { perror("Failed to fork, logcat not starting"); return 1; […]

改变一个进程的父母

是否有可能改变一个stream程父母? 例如:父母A有孩子B我可以让父母的B是没有杀死A的初始程序?

当操作系统杀死你的进程时返回代码

我想testing如果使用多进程,我可以在32位操作系统上使用超过4GB的内存(我的是:1GB内存的Ubuntu)。 所以我写了一个malloc稍小于1GB的小程序,并对该数组执行一些操作,并运行该程序的5个实例。 事情是,我怀疑操作系统杀死了其中的4个,只有一个幸存下来,并显示它是“PID:我已经完成”)。 (我已经尝试了小数组,并得到5印刷,当我看着与TOP运行的进程,我只看到一个实例..) 奇怪的是这个 – 我收到了所有实例的返回代码0(成功?),包括据说被OS 我没有得到任何按摩说明进程被杀害。 这个返回代码是否正常? (如果是这样,这减less了我对'返回代码'的信任…) 谢谢。 编辑:一些答案build议在小程序可能的错误,所以在这里。 分支和保存返回码的较大的程序是较大的,我在这里有麻烦,但我认为(并希望)没有问题。 我也注意到,如果不是用我的分叉程序来运行它,我使用'.a.out&./a.out&./a.out&./a.out&'来运行terminal。 ./a.out是附带的小程序的二进制文件)我看到一些“Killed”消息。 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #define SMALL_SIZE 10000 #define BIG_SIZE 1000000000 #define SIZE BIG_SIZE #define REAPETS 1 int main() { pid_t my_pid = getpid(); char * x = malloc(SIZE*sizeof(char)); if (x == NULL) { printf("Malloc failed!"); return(EXIT_FAILURE); […]

更改进程名称而不更改Linux中的argv

我需要用C语言修改我的程序的进程名称。 我确切地说,这不是我想改变的线程的名称。 我想改变我的程序名称,但唯一的解决scheme是修改argv[0]的值。 我还发现了prctl(PR_SET_NAME, "newname")另一个解决scheme,但是此解决scheme不起作用。

如何在C中的Linux中获得一个进程的PID

我需要杀死一个使用kill API的进程。 为此,我需要进程的进程ID。 我试图得到它使用: ret = system("pidof -s raj-srv"); 但它没有返回正确的值。 我不想杀死使用这个过程: ret = system("pkill raj"); 有没有可以用来获取进程ID的API?

如何确定Linux中的进程内存限制?

我一直在search互联网,找出一个java进程可以在Linux(红帽)机器上占用多less内存。 (我不是在说堆,而是由java 进程占用的全部内存量) 我没有权限在该机器上执行任何操作。 所以我不能简单地执行一个消耗内存的程序,直到内存不足的状态。 但是,我有权限检查configuration文件等(例如:我试图执行cat / proc / meminfo,但我不明白,它的结果似乎没有代表我想知道的参数关于)。 我已经在一个单独的红帽机器上尝试了一个java程序 – 在这个机器上我有执行程序的权限 – 我能够看到java程序长到3GB左右。 有什么方法可以找出一个进程可以得到多less内存?