То, что вы хотите - это pid
процесса, который запускает эту программу.
Сигнатура функции fork
следующая:
#include <unistd.h>
pid_t fork(void);
и она возвращает:
0
у ребенка the pid of the child
у родителя -1
в случае возникновения ошибки
Еслиесли вы хотите получить pid
нового созданного процесса (дочернего), вы должны проверить, больше ли возвращаемое значение, чем 0
.
В вашем примере:
pid_t pid = fork()
if (pid == 0) {
struct rlimit limits;
limits.rlim_cur = 10000000; // set data segment limit to 10MB
limits.rlim_max = 10000000; // make sure the child can't increase it again
setrlimit(RLIMIT_DATA, &limits);
execv(...);
}
else if (pid > 0) {
/* That's the value of the pid you are looking for */
}
Это может сбивать с толку, но дело в том, что при выполнении fork()
он создает дочерний процесс, поэтому программа как бы разделяется на две части.Вот почему вы должны проверить значение pid
и делать то, что вы хотите, в зависимости от того, являетесь ли вы ребенком или родителем.