在Unix/Linux shell脚本中创建子进程主要有以下几个常见方法:
方法一:通过&
后台运行命令创建子进程
当你在命令末尾加上&
字符,shell会将这个命令放入后台运行,从而创建一个新的子进程:
command &
例如:
sleep 10 & # 这将会启动一个睡眠10秒的子进程,然后立即返回到父shell
方法二:通过( )
分组命令并后台执行
(command1 ; command2 ; command3) &
这里,括号内的命令序列会在子shell中顺序执行,整个括号表达式作为一个整体在后台运行,每个命令之间用分号隔开。
方法三:使用fork()
和exec()
系统调用(在shell脚本中并不直接使用,但在编写C程序模拟shell时会用到)
在编写C语言程序时,可以调用POSIX标准的fork()
系统调用来创建子进程,然后在子进程中调用exec()
系列函数(如execl()
, execv()
等)来执行新的程序:
#include <unistd.h>
pid_t pid = fork();
if (pid == 0) {
// 子进程
execl("/bin/echo", "echo", "This is from child process", (char *)NULL);
// 如果exec成功,这行不会被执行;如果失败,则通常会有错误处理
} else if (pid > 0) {
// 父进程
// 继续执行父进程的逻辑...
} else {
// fork失败
perror("fork");
exit(EXIT_FAILURE);
}
在shell脚本中虽然不能直接调用fork()
和exec()
,但shell本身就是在内部执行了类似的操作来启动子进程的。你可以在shell脚本中间接利用这一机制,通过执行外部命令或脚本来创建子进程。