标签: exec

将指针传递给使用exec()生成的进程

我想传递一个指针(我将一个带有mmap的数据存储在内存中的文件)到使用fork + exec生成的进程,但我仍然坚持如何将指针传递给exec()生成的进程?

UPDATE1:

感谢您的输入,我使用共享内存创建它与mmap与MAP_INHERIT标志:

使用mmap()函数创建的每个映射文件和共享内存区域都是通过成功调用任何exec函数而取消映射的,除了那些使用MAP_INHERIT选项映射的区域.使用MAP_INHERIT选项映射的区域仍保留在新过程映像中.

来源:http://www.uwm.edu/cgi-bin/IMT/wwwman?topic=exec(2)&msection=

UPDATE2:

这是家庭作业练习,但我想我必须停止思考指针并思考IPC本身.我想我会尝试在子进程中映射相同的文件.

短代码示例非常感谢.

在此先感谢您的帮助.

c++ linux gcc mmap exec

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

Unix编程... fork()&execv()帮助... C编程

我正在编写自己的unix终端,我遇到了执行命令的问题:

首先,我将用户输入并将其存储到缓冲区中,然后将单词分开并将它们存储到我的argv []数组中.即命令是"firefox"来启动存储在argv [0]中的firefox

如何启动命令?这就是我想要做的,但我遇到了错误:

void launchProcess(char *command[], char *file){
        pid_t pid;
        pid = fork();
        if (pid == -1) {
                perror("Error when forking");
                exit(EXIT_FAILURE);
        }
        if (pid == 0){                  
                fprintf(stderr, "Child pid = %d\n", getpid());
                execv(file, command);
            }
Run Code Online (Sandbox Code Playgroud)

我打电话的时候:

launchProcess(commandArgv, "STANDARD");
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:错误:launchProcess的冲突类型

c unix exec

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

从ac程序执行"echo $ PATH"?

我试图从C程序显示,设置和修改PATH环境变量.我这样做: -

char *cmd[] = { "echo", "$PATH", (char *)0 };
if (execlp("echo", *cmd) == -1)
Run Code Online (Sandbox Code Playgroud)

但我没有得到结果.

c linux path exec

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

执行调用

我想通过execve在C程序中调用一个shell:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

main()
{
        char* path = "/bin/sh";
        int err = execve(path, &path, NULL);
        printf("%d\n", err);
        printf("%s\n", strerror(errno));
        printf("%x, %x\n", path, &path);
}
Run Code Online (Sandbox Code Playgroud)

但输出是:

-1
Bad address
80485c0, bf816f4c
Run Code Online (Sandbox Code Playgroud)

c shell exec

1
推荐指数
2
解决办法
5894
查看次数

如何使用ulimit编写java程序来增加文件限制

我正在使用Fedora linux,其中ulimit -n 10000将文件限制增加到10000.我想使用java程序实现相同的目标

如何使用ulimit编写java程序来增加文件限制我已经尝试过以下程序,但它没有运行良好.该程序没有给出任何错误.但也没有增加文件限制

public class IncreaseFIle {
    public static void main(String[] args) {

       String command = "/bin/bash ulimit -n 10000";
//        String command = "pwd";
        try {
            Runtime.getRuntime().exec(command);

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢Sunil Kumar Sahoo

java exec

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

C中未使用的退货状态代码

我想基于子代码的执行,将一个唯一的状态代码从子进程通过exit()返回给等待的父进程.如果execvp失败,则使用exit().我假设如果execvp成功,执行的命令将发送其状态代码.

pid=fork();
if(pid==0)
{
    if(execvp(cmdName,cmdArgs)==-1)
    {
         printf("Exec failed!\n");
         exit(K);   //K?
    }
}
waitpid(pid,&status,0);
Run Code Online (Sandbox Code Playgroud)

假设传递给execvp()的命令是"ls",手册页说它可能返回0(成功),1或2(失败).

我可以使用什么安全唯一值K来指示子进程的返回状态,它不会与execvp()执行的命令返回的任何值冲突?

c operating-system exec

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

如果我有一个进程,并且我克隆它,那么PID是否相同?

只是一个简单的问题,如果我克隆一个进程,克隆进程的PID是一样的,是吗?fork()创建一个PID不同的子进程,但其他一切都是相同的.Vfork()使用相同的PID创建子进程.Exec用于将当前正在执行的进程更改为其他进程.

我在所有这些陈述中都是正确的吗?

linux fork pid exec

1
推荐指数
2
解决办法
5751
查看次数

将GET变量传递给php EXEC

我已经尝试过搜索,但是如果在某个地方得到回答的话,我没有多少运气道歉.

我正在玩一些零碎的东西,我试图将一个URL变量传递给EXEC.这是我正在尝试的... sc.exe是一个我必须传递URL的程序 - $ GET_ID变量必须来自URL

  $GET_ID =$_GET= ['myid'];
  exec('sc.exe --url=http://localhost/DS1/test.php?ID='.$GET_ID.'&TEST=1');
  echo $GET_ID;
Run Code Online (Sandbox Code Playgroud)

当我尝试这个代码时 - 似乎没有传递GET变量,程序得到 http://localhost/DS1/test.php?ID =&TEST = 1 '

我做了一些搜索..这似乎是一种限制..所以解决方案/解决方法是什么?

谢谢

php variables exec

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

PHP exec错误,可能是使用ghostscript的MAMP

我一直试图在PHP中使用ghostscript将pdf文件转换为图像(png,jpg).

只要它们是图像我就不在乎.这是我使用的代码.

exec("gs -sDEVICE=jpeg -sOutputFile=/Applications/Mamp/htdocs/cover.jpg -r144 /Applications/Mamp/htdocs/test.pdf"); 
Run Code Online (Sandbox Code Playgroud)

当我输入完全相同的东西,显然没有exec和引号,进入命令行它完全符合我的要求.但是,当我运行php文件时没有任何反应.我正在使用MAMP服务器,服务器似乎工作正常,每当我用它运行另一个文件我没有问题.任何人都有任何想法为什么它可能无法正确执行?

php mamp exec ghostscript

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

为什么exec()在chroot()之后不起作用?

我正在玩exec家庭功能,我看到了一个非常奇怪的行为:它们在chroot()系统调用后似乎不起作用.

这是来自联机帮助页的相关报价:

execlp()和execvp()的特殊语义

如果指定的文件名不包含斜杠(/)字符,则execlp(),execvp()和execvpe()函数会复制shell在搜索可执行文件时的操作.在PATH环境变量中指定的以冒号分隔的目录路径名列表中查找该文件.如果未定义此变量,则路径列表默认为当前目录,后跟confstr(_CS_PATH)返回的目录列表.(此confstr(3)调用通常返回值"/ bin:/ usr/bin".)

如果指定的文件名包含斜杠字符,则忽略PATH,并执行指定路径名的文件.

这就是理论,现在让我们看看它的表现如何:

  • 我有prog.c将执行的文件execlp:

    #include <stdio.h>
    
    int main()
    {
        puts("works!");
        return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 我有exec.c文件将尝试执行prog:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <errno.h>
    #include <dirent.h>
    
    int main(int argc, char* const argv[])
    {
        const char path[] = "/home/zaffy/cool";
    
        if (argc < 2)
            return 1;
    
        if (argc > 2 && (chdir(path) || chroot(path)))
        {
            printf("Cannot chroot(%s): %s\n", path, strerror(errno));
            return 1;
        } …
    Run Code Online (Sandbox Code Playgroud)

c c++ linux exec

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

标签 统计

exec ×10

c ×5

linux ×4

c++ ×2

php ×2

fork ×1

gcc ×1

ghostscript ×1

java ×1

mamp ×1

mmap ×1

operating-system ×1

path ×1

pid ×1

shell ×1

unix ×1

variables ×1