setpgid/setpgrp call on AIx v3.1

Bhaskar Srinivasan ~ bsriniv at cadev1.intel.com
Wed May 22 12:07:21 AEST 1991


Hi,

I have a problem with setpgid/setpgrp call on Aixv3.1. When I run the
following code on SunOSV4.0.2, I am able to change the process group id
of the process that exec`ed. On AixV3.1, I get an error from the
setpgid call,

	"setpgid: Not owner"

Does anybody know what is going on ? Any help is appreciated.

Thanx
Bhaskar

------------------------------------------------------------------------

#include <stdio.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/resource.h>

main()
{
	char *av[6];
	int i, ac;
	int pg = 10000;
	int newpg;
	int sig, child;
	void donechild();

	for(i=0; i<32; i++)
		signal(i, SIG_IGN);
	signal(SIGCHLD, donechild);
	signal(SIGINT, SIG_DFL);
	signal(SIGQUIT, SIG_DFL);

	av[0] = "csh";
	av[1] = "-c";
	av[2] = "tbat";
	av[3] = 0;

	if(child = fork()) {
	   for(;;) {
		fscanf(stdin, "%d", &sig);
		if (killpg(pg, sig) < 0)
			perror("killpg");
		printf("signal %d\n", sig);
	   }
	} else {
		for(i=0; i<32; i++)
			signal(i, SIG_IGN);
		signal(SIGINT, SIG_DFL);
		signal(SIGQUIT, SIG_DFL);
/*		if(setpgrp(0, pg) < 0) */
		if(setpgid(0, pg) < 0)
			perror("setpgid"); 

		printf("starting\n");
		execvp(av[0], av);
	}
		
}

void donechild()
{
	int pid;
/* 	union wait status; */
	int status;
	struct rusage ruse;

	printf("entering donechild\n");

        while((pid = wait3(&status, WNOHANG, &ruse)) > 0) {
		if (WIFSTOPPED(status))
			printf("stopped child\n");
		else {
			printf("donechild\n");
			exit(0);
		}
	}
}



More information about the Comp.unix.aix mailing list