Articles of exec

unix fork执行序列是否真的和昂贵的一样?

我正在阅读有关fork和exec的考试,而我的书说,只要需要在unix系统中运行一个新的(不同的)进程,就可以分叉当前进程,然后执行execve 。 但是,它也表示,无论何时调用fork ,父级的整个内存映像都将被复制到新进程中。 那么我的问题是:如果你有一个非常大的内存镜像,你只想运行一个新的进程呢? 如果您要立即更换,那么从父进程复制所有数据是不是浪费资源?

C中的后台进程(守护进程)不是execvp()

所以,我试图从中运行后台进程和execvp。 当我inputcp / path / file / var / tmp时,进程不复制文件。 这里是我的代码供参考: void cmd_bg(char command[]) { pid_t process_id = 0; pid_t sid = 0; char* argv[512]; getArgv(command,argv); // Create child process process_id = fork(); // Indication of fork() failure if (process_id < 0) { printf("fork failed!\n"); // Return failure in exit status exit(1); } // PARENT […]

我们可以使用exec()给&作为参数来启动后台进程吗?

如果不是的话,我们如何在C中启动一个后台进程呢?

将信号发送到调用exec()的分叉进程

我有一个简单的C程序,分叉一个进程,并调用exec来运行命令如下: #include<stdio.h> #include<signal.h> #include<unistd.h> #include<sys/types.h> int fork_process(int sleep_interval) { char cmd[30]; pid_t pid = fork(); if (pid > 0) { return pid; } else if (pid < 0) { printf("At parent. Couldn't create a child process!\n"); return pid; } else { sprintf(cmd, "sleep %d; %s", sleep_interval, "gzip a > a.gz"); execlp("sh", "sh", "-c", cmd, (char […]

用C发送一个exec进程到后台?

我的问题听起来是一样的,但它不是: 用C在Linux的后台启动一个进程 我知道如何做fork(),但不知道如何发送进程到后台。 我的程序应该像一个简单的命令unix shell,它支持pipe道和后台进程。 我可以做pipe道和叉子,但是我不知道如何用程序的最后一行来发送进程到后台: ~>./a.out uname SunOS ^C my:~>./a.out uname & 如何实现后台进程? #include <sys/types.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #define TIMEOUT (20) int main(int argc, char *argv[]) { pid_t pid; if(argc > 1 && strncmp(argv[1], "-help", strlen(argv[1])) == 0) { fprintf(stderr, "Usage: Prog [CommandLineArgs]\n\nRunSafe takes as arguments:\nthe program […]

如何在find中使用-exec内的pipe道

有什么办法可以在find中使用pipe道内的-exec吗? 我不希望grep通过整个文件,但只能通过每个文件的第一行。 find /path/to/dir -type f -print -exec grep yourstring {} \; 我试着用“猫”和“头-1”把pipe道放在那里,但是效果不好。 我试图用括号,但我没有设法弄清楚到底怎么把它们放在那里。 我会非常感谢你的帮助。 我知道如何用其他方式来解决问题,而不是使用find,但是我们试图在学校里使用find和pipeline来实现,但是不能pipe理。 find /path/to/dir -type f -print -exec cat {} | head -1 | grep yourstring \; 这是我们试图做到的,但不能pipe理括号,甚至是可能的。 我试图通过networking,但无法find任何答案。

如何从一个tcl文件使用sed

我试图在tcl文件中使用Unix“sed”命令forms,如下所示:(将多个空格更改为一个空格) exec /bin/sed 's/ \+/ /g' $file 我也尝试了exec /bin/sed 's/ \\+/ /g' $file (一个额外的反斜杠) 没有版本的工作,我得到的错误 /bin/sed: -e expression #1, char 1: Unknown command: `'' 从linuxterminal运行该命令工作正常 我究竟做错了什么?

如何更改shell的php的exec()

我想在ubuntu服务器上使用php的exec()函数。 问题是,我总是得到一个错误,找不到命令。 例如使用 exec("echo 123"); 版画 sh:/ echo:找不到 对我来说,当我想要使用bash时,它看起来像php使用sh shell。 我试图更改/ etc / passwd中的www数据的shell,这也没有帮助。 有没有人有一个想法可能来自哪里,或者我可以如何改变shell的PHP的Ubuntu的用户。 谢谢,Timo [编辑] 也许这有助于: 我从ssh调用一个bash脚本作为timo,这个脚本调用一个使用exec的php脚本。 我知道,这听起来很奇怪,但它是更大的开发环境的一部分。 关键是,我不知道哪个用户执行exec内部的脚本。 [编辑] 到目前为止,我发现还有另一个权利问题。 即使我尝试从exec内部调用一个bash脚本test.sh(通过它的完整path!),php test.php就会说。 sh:/test.sh:找不到

为什么程序在这个C编程或unix编程(execvp()系统调用)中没有执行一些句子?

我有下面的程序,当我运行程序时,我感到非常困惑,为什么我的程序没有执行 int num=i; printf("it is No.%d !",num); printf("hello , I will excute execvp!"); 我的程序基本上创build6个subprocess来执行executionbode()函数,然后使用execvp来重载原始程序。 但是,每次运行程序时,string“你好,我将执行execvp”永远不会显示! 另外我觉得上面这三句话在运行程序中也没有执行? 有人能告诉我为什么? 这是我的程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include "makeargv.h" #include "redirection.h" #include <sys/wait.h> int executionnode(int i); int main(){ pid_t childpid; int i; int row=6; for(i=0;i<row;i++) { childpid=fork(); if(childpid==0) continue; else if (childpid>0) […]

用波浪号在path中执行bash脚本

我正试图在Linux中执行: command[0] = "~/test/bin/runScript_sh"; Runtime.getRuntime().exec(command); 但是得到一个exceptionjava.io.IOException:不能运行程序 错误= 2,没有这样的文件或目录 可能是因为它不能评估代字号。 可以做什么?