当前位置: 技术问答>linux和unix
fork调用产生的子进程,还能不能创建下一级的子进程?
来源: 互联网 发布时间:2016-05-20
本文导语: 请指教,在LINUX系统的C语言程序里,我使用fork()调用在父进程中创建了一个子进程,那么,我能否再以子进程作为父进程去创建另一个子进程。我写的测试代码里是不行的,否则子子孙孙无穷匮也。想请教这是何机制...
请指教,在LINUX系统的C语言程序里,我使用fork()调用在父进程中创建了一个子进程,那么,我能否再以子进程作为父进程去创建另一个子进程。我写的测试代码里是不行的,否则子子孙孙无穷匮也。想请教这是何机制?
if ((cld_pid = fork()) == 0) {
puts("儿子");
exit(0);
}
else
puts("老子");
|
调用fork的进程就是父进程。父子进程在fork调用点以后执行的代码是一样的。
在子进程中再次调用fork,会再创建一个子进程。
Linux中所有的进程都是直接或间接从0号进程fork来的。
在子进程中再次调用fork,会再创建一个子进程。
Linux中所有的进程都是直接或间接从0号进程fork来的。
|
能
|
可以啊,
我想楼主是没有理解你这里的儿子进程是从哪里开始运行吧.你的测试方案是不行的。
我想楼主是没有理解你这里的儿子进程是从哪里开始运行吧.你的测试方案是不行的。
|
绝对可以。。因为linux下这么多进程,他们的都是1号进程fork出来的。
|
debian:~# ps -aef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 23:41 ? 00:00:00 init [5]
root 2 1 0 23:41 ? 00:00:00 [migration/0]
root 3 1 0 23:41 ? 00:00:00 [ksoftirqd/0]
root 4 1 0 23:41 ? 00:00:00 [events/0]
root 5 1 0 23:41 ? 00:00:00 [khelper]
root 6 1 0 23:41 ? 00:00:00 [kthread]
root 9 6 0 23:41 ? 00:00:00 [kblockd/0]
root 10 6 0 23:41 ? 00:00:00 [kacpid]
root 71 6 0 23:41 ? 00:00:00 [kseriod]
root 111 6 0 23:41 ? 00:00:00 [pdflush]
root 112 6 0 23:41 ? 00:00:00 [pdflush]
root 113 6 0 23:41 ? 00:00:00 [kswapd0]
root 114 6 0 23:41 ? 00:00:00 [aio/0]
root 562 6 0 23:41 ? 00:00:00 [khubd]
root 635 6 0 23:42 ? 00:00:00 [scsi_eh_0]
root 928 6 0 23:42 ? 00:00:00 [kjournald]
root 1090 1 0 23:42 ? 00:00:00 udevd --daemon
root 1400 6 0 23:42 ? 00:00:00 [kgameportd]
root 1403 6 0 23:42 ? 00:00:00 [kpsmoused]
root 1663 6 0 23:42 ? 00:00:00 [kmirrord]
root 1919 1 0 23:42 ? 00:00:00 /sbin/syslogd
root 1930 1 0 23:42 ? 00:00:00 /sbin/klogd -x
root 1997 1 0 23:42 ? 00:00:00 /usr/sbin/acpid -c /etc/acpi/eve
root 2023 1 0 23:42 ? 00:00:00 /usr/sbin/sshd
root 2044 1 0 23:42 ? 00:00:00 /usr/sbin/cron
root 2068 1 0 23:42 tty1 00:00:00 /sbin/getty 38400 tty1
root 2084 1 0 23:42 ? 00:00:00 dhclient3 -pf /var/run/dhclient.
root 2091 2023 0 23:42 ? 00:00:00 sshd: root@pts/0
root 2093 2091 0 23:42 pts/0 00:00:00 -bash
root 2125 2093 0 23:46 pts/0 00:00:00 ps -aef
楼主自己看下吧,PPID是父进程,PID是子进程。其实都是“一个祖宗传下来”的,呵呵...
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 23:41 ? 00:00:00 init [5]
root 2 1 0 23:41 ? 00:00:00 [migration/0]
root 3 1 0 23:41 ? 00:00:00 [ksoftirqd/0]
root 4 1 0 23:41 ? 00:00:00 [events/0]
root 5 1 0 23:41 ? 00:00:00 [khelper]
root 6 1 0 23:41 ? 00:00:00 [kthread]
root 9 6 0 23:41 ? 00:00:00 [kblockd/0]
root 10 6 0 23:41 ? 00:00:00 [kacpid]
root 71 6 0 23:41 ? 00:00:00 [kseriod]
root 111 6 0 23:41 ? 00:00:00 [pdflush]
root 112 6 0 23:41 ? 00:00:00 [pdflush]
root 113 6 0 23:41 ? 00:00:00 [kswapd0]
root 114 6 0 23:41 ? 00:00:00 [aio/0]
root 562 6 0 23:41 ? 00:00:00 [khubd]
root 635 6 0 23:42 ? 00:00:00 [scsi_eh_0]
root 928 6 0 23:42 ? 00:00:00 [kjournald]
root 1090 1 0 23:42 ? 00:00:00 udevd --daemon
root 1400 6 0 23:42 ? 00:00:00 [kgameportd]
root 1403 6 0 23:42 ? 00:00:00 [kpsmoused]
root 1663 6 0 23:42 ? 00:00:00 [kmirrord]
root 1919 1 0 23:42 ? 00:00:00 /sbin/syslogd
root 1930 1 0 23:42 ? 00:00:00 /sbin/klogd -x
root 1997 1 0 23:42 ? 00:00:00 /usr/sbin/acpid -c /etc/acpi/eve
root 2023 1 0 23:42 ? 00:00:00 /usr/sbin/sshd
root 2044 1 0 23:42 ? 00:00:00 /usr/sbin/cron
root 2068 1 0 23:42 tty1 00:00:00 /sbin/getty 38400 tty1
root 2084 1 0 23:42 ? 00:00:00 dhclient3 -pf /var/run/dhclient.
root 2091 2023 0 23:42 ? 00:00:00 sshd: root@pts/0
root 2093 2091 0 23:42 pts/0 00:00:00 -bash
root 2125 2093 0 23:46 pts/0 00:00:00 ps -aef
楼主自己看下吧,PPID是父进程,PID是子进程。其实都是“一个祖宗传下来”的,呵呵...
|
原始祖先为 init
|
pid_t pid;
if((pid = fork)
if((pid = fork)