|
Description
|
in a same process group, if parent want to set child as the group lead, it should succeed, see the case:
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
main()
{
pid_t c_pid, p_pid, act_pid, exp_pid;
int status;
c_pid = fork();
if(c_pid < 0){
printf("fork fail\n");
return 1;
}else if(c_pid > 0){ //parent
if (setpgid((pid_t)0, (pid_t)0) == -1)
{
printf("PARENT: setpgid(0, 0) failed %d(%s)\n",
errno, strerror(errno));
}
printf("PARENT: my child pid is %ld\n", (long)c_pid);
printf("PARENT: my own pid is %ld\n", (long)getpid());
if (setpgid((pid_t)c_pid, (pid_t)0) == -1)
{
printf("PARENT: setpgid() failed %d(%s)", errno, strerror(errno));
printf("PARENT: setpgid(pid, 0) with pid = %ld", (long)c_pid);
}
printf("PARENT: make my child group lead\n");
waitpid(c_pid, &status, 0);
return 0;
}else{ //child
printf("CHILD: sleep for parent finish his job\n");
sleep(10);
act_pid = getpgrp();
printf("CHILD: my current group pid=%ld\n", (long)act_pid);
exp_pid = getpid();
printf("CHILD: expected group pid=%ld\n", (long)exp_pid);
if(act_pid != exp_pid)
printf("case FAIL!\n");
else
printf("case PASS!\n");
exit(0);
}
return 0;
}
run in native linux OS:
miin:/tmp> uname -a
Linux miin 2.4.21-4.ELsmp #1 SMP Fri Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux
miin:/tmp> ./setpgid_4
CHILD: sleep for parent finish his job
PARENT: my child pid is 6736
PARENT: my own pid is 6735
PARENT: make my child group lead
CHILD: my current group pid=6736
CHILD: expected group pid=6736
case PASS!
run in solaris global:
bash-3.00# uname -a
SunOS covete 5.11 onnv-gate:2006-10-23 i86pc i386 i86pc
bash-3.00# ./setpgid_4
CHILD: sleep for parent finish his job
PARENT: my child pid is 128452
PARENT: my own pid is 128451
PARENT: make my child group lead
CHILD: my current group pid=128452
CHILD: expected group pid=128452
case PASS!
run in linux zone:
[root@lxzone1 tmp]# ./setpgid_4
CHILD: sleep for parent finish his job
PARENT: my child pid is 128457
PARENT: my own pid is 128456
PARENT: make my child group lead
CHILD: my current group pid=128456
CHILD: expected group pid=128457
case FAIL!
|