int
main(int argc, char *argv[])
{
    pid_t childPid;
    struct sigaction sa;

    setbuf(stdout, NULL);       /* Make stdout unbuffered */

    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sa.sa_handler = handler;
    if (sigaction(SIGHUP, &sa, NULL) == -1)
        errExit("sigaction");

    childPid = fork();
    if (childPid == -1)
        errExit("fork");

    if (childPid == 0 && argc > 1)
        if (setpgid(0, 0) == -1)        /* Move to new process group */
            errExit("setpgid");

    printf("PID=%ld; PPID=%ld; PGID=%ld; SID=%ld\n", (long) getpid(),
            (long) getppid(), (long) getpgrp(), (long) getsid(0));

    alarm(60);                  /* An unhandled SIGALRM ensures this process
                                   will die if nothing else terminates it */
    for(;;) {                   /* Wait for signals */
        pause();
        printf("%ld: caught SIGHUP\n", (long) getpid());
    }
}
Exemple #2
0
/* fork and have child create new session */
int main(void)
{
    pid_t pid;

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {	/* child */
        if (setsid() != getpid())
            err_sys("setsid error");
        if (getpgrp() == getpid())
            fprintf(stderr, "I am process group leader\n");
        else
            fprintf(stderr, "I am not process group leader\n");

        sleep(2);
        fprintf(stderr, "child: sid:%ld pid:%ld ppid:%ld\n",
                (long)getsid(0), (long)getpid(), (long)getppid());

    } else {		/* parent */
        sleep(2);
        fprintf(stderr, "parent: sid:%ld pid:%ld ppid:%ld\n",
                (long)getsid(0), (long)getpid(), (long)getppid());
    }
    return 0;
}
Exemple #3
0
void
process(char *name, pid_t *cids, int cnum)
{
  pid_t pid = getpid();
  pid_t ppid = getppid();
  pid_t pgrp = getpgrp();
  pid_t sid = getsid(0);

  FILE *fp;

  fp = fopen(name, "w");
  fprintf(fp, "pid/spid\tppid/sppid\tsid/ssid\n");
  fclose(fp);
  while (1) {
    int ret = 0, i;

    fp = fopen(name, "a");
    fprintf(fp, "%d/%d\t%d/%d\t%d/%d\n",
            getpid(), pid,
            getppid(), ppid,
            getsid(0), sid);
    fclose(fp);

    ret = check_credentials(pid, ppid, pgrp, sid);
    if (ret) {
      parse_credentials(ret, name, pid, ppid, pgrp, sid);
    }
    for (i = 0; i < cnum; i++) {
      if (kill(cids[i], 0) < 0) {
        printf("%s: no child #%d = %d\n", name, i, cids[i]);
      }
    }
    sleep(1);
  }
}
Exemple #4
0
int main(int argc,char *argv[])
{
	pid_t pid;
	if ( (pid = fork()) < 0) {
		perror("fork");
		return -1;
	}
	if (pid == 0) {
		printf("child id : %d\n",getpid());		
		printf("parent id :%d\n",getppid());
		printf("group id:%d\n",getpgid(0));
		printf("session id:%d\n",getsid(0));
		sleep(6);
		setsid();
		printf("child id : %d\n",getpid());		
		printf("parent id :%d\n",getppid());
		printf("group id:%d\n",getpgid(0));
		printf("session id:%d\n",getsid(0));
		sleep(10);
		return 0;
	}
	/**
	printf("parent session:%d\n",getsid(getpid()));
	printf("parent group:%d\n",getpgid(getpid()));
	wait(NULL);
	*/
	return 0;
}
Exemple #5
0
int
main(int ac, char **av)
{
        pid_t sid, mypid, pgid, gid;

        mypid = getpid();
        sid = getsid(0);
        pgid = getpgid(0);
        gid = getpgrp();

        printf("PID %d\n", mypid);
        printf("process group ID of session leader: %d\n", sid);
        printf("process group ID: %d\n", pgid);
        printf("process group ID: %d\n", gid);

        if (!fork())
        {
                mypid = getpid();
                sid = getsid(0);
                pgid = getpgid(0);
                gid = getpgrp();

                printf("child PID %d\n", mypid);
                printf("process group ID of session leader: %d\n", sid);
                printf("process group ID: %d\n", pgid);
                printf("process group ID: %d\n", gid);

                _exit(0);
        }

        return 0;
}
Exemple #6
0
int main()
{
	int i;
	printf("%d\n", getsid());
	setsid();
	printf("%d\n", getsid());
	printf("hello world\n");
}
int
main(int argc, char *argv[])
{
    int j;
    struct sigaction sa;

    if (argc < 2 || strcmp(argv[1], "--help") == 0)
        usageErr("%s {s|p} ...\n", argv[0]);

    setbuf(stdout, NULL);               /* Make stdout unbuffered */

    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sa.sa_handler = handler;
    if (sigaction(SIGHUP, &sa, NULL) == -1)
        errExit("sigaction");
    if (sigaction(SIGCONT, &sa, NULL) == -1)
        errExit("sigaction");

    printf("parent: PID=%ld, PPID=%ld, PGID=%ld, SID=%ld\n",
            (long) getpid(), (long) getppid(),
            (long) getpgrp(), (long) getsid(0));

    /* Create one child for each command-line argument */

    for (j = 1; j < argc; j++) {
        switch (fork()) {
        case -1:
            errExit("fork");

        case 0:         /* Child */
            printf("child:  PID=%ld, PPID=%ld, PGID=%ld, SID=%ld\n",
                    (long) getpid(), (long) getppid(),
                    (long) getpgrp(), (long) getsid(0));

            if (argv[j][0] == 's') {    /* Stop via signal */
                printf("PID=%ld stopping\n", (long) getpid());
                raise(SIGSTOP);
            } else {                    /* Wait for signal */
                alarm(60);              /* So we die if not SIGHUPed */
                printf("PID=%ld pausing\n", (long) getpid());
                pause();
            }

            _exit(EXIT_SUCCESS);

        default:        /* Parent carries on round loop */
            break;
        }
    }

    /* Parent falls through to here after creating all children */

    sleep(3);                           /* Give children a chance to start */
    printf("parent exiting\n");
    exit(EXIT_SUCCESS);                 /* And orphan them and their group */
}
static void
do_test_setsid (bool test_setsid)
{
  pid_t sid, child_sid;
  int res;

  /* Current session ID.  */
  sid = getsid(0);
  if (sid == (pid_t) -1)
    FAIL_EXIT1 ("getsid (0): %m");

  posix_spawnattr_t attrp;
  /* posix_spawnattr_init should not fail (it basically memset the
     attribute).  */
  posix_spawnattr_init (&attrp);
  if (test_setsid)
    {
      res = posix_spawnattr_setflags (&attrp, POSIX_SPAWN_SETSID);
      if (res != 0)
	{
	  errno = res;
	  FAIL_EXIT1 ("posix_spawnattr_setflags: %m");
	}
    }

  /* Program to run.  */
  char *args[2] = { (char *) "true", NULL };
  pid_t child;

  res = posix_spawnp (&child, "true", NULL, &attrp, args, environ);
  /* posix_spawnattr_destroy is noop.  */
  posix_spawnattr_destroy (&attrp);

  if (res != 0)
    {
      errno = res;
      FAIL_EXIT1 ("posix_spawnp: %m");
    }

  /* Child should have a different session ID than parent.  */
  child_sid = getsid (child);

  if (child_sid == (pid_t) -1)
    FAIL_EXIT1 ("getsid (%i): %m", child);

  if (test_setsid)
    {
      if (child_sid == sid)
	FAIL_EXIT1 ("child session ID matched parent one");
    }
  else
    {
      if (child_sid != sid)
	FAIL_EXIT1 ("child session ID did not match parent one");
    }
}
Exemple #9
0
int main(int argc, char* argv[]) {
  pid_t sid1;
  pid_t sid2;

  sid1 = getsid(0);
  sid2 = getsid(sid1);
  atomic_printf("getsid(0) session ID: %d\n", sid1);
  atomic_printf("getsid(getsid(0)) session ID: %d\n", sid2);

  if (sid1 == sid2) {
    atomic_puts("EXIT-SUCCESS");
  }

  return 0;
}
Exemple #10
0
int main(int argc, char *argv[])
{
	pid_t pid;
	int fd;

	if ((pid = fork()) == -1) {
		perror("fork");
		return -1;
	} else if (pid > 0) {
		int status;
		if (waitpid(pid, &status, 0) == -1) {
			perror("waitpid");
			return -1;
		}
		if (WIFEXITED(status)) {
			if (WEXITSTATUS(status) != 0) {
				fprintf("child exit %d\n", WEXITSTATUS(status));
				return -1;
			}
		} else if (WIFSIGNALED(status)) {
			fprintf("child termiated by signal %d\n", WTERMSIG(status));
			return -1;
		}
		printf("parent: pid=%d, ppid=%d, pgrp=%d, sid=%d, tpgrp=%d\n",
			getpid(), getppid(), getpgrp(), getsid(0), tcgetpgrp(STDIN_FILENO));
		return 0;
	}

	printf("child: pid=%d, ppid=%d, pgrp=%d, sid=%d, tpgrp=%d\n",
		getpid(), getppid(), getpgrp(), getsid(0), tcgetpgrp(STDIN_FILENO));
	if ((fd = open("/dev/tty", O_RDONLY)) == -1) {
		perror("open controlling terminal failed before creating session");
	} else {
		printf("open controlling terminal succeed before creating session\n");
		close(fd);
	}
	setsid();
	printf("child: pid=%d, ppid=%d, pgrp=%d, sid=%d, tpgrp=%d\n",
		getpid(), getppid(), getpgrp(), getsid(0), tcgetpgrp(STDIN_FILENO));
	if ((fd = open("/dev/tty", O_RDONLY)) == -1) {
		perror("open controlling terminal failed after creating session");
	} else {
		printf("open controlling terminal succeed after creating session\n");
		close(fd);
	}

	return 0;
}
Exemple #11
0
int tty_setattr(int speed)
{
	int rc;
	pid_t me=getpid();
	struct termios tios;
	speed_t tspeed=tty_transpeed(speed);
	signal(SIGHUP,tty_sighup);
	signal(SIGPIPE,tty_sighup);
	if(getsid(me)==me) {
#ifdef HAVE_TIOCSCTTY
		/* We are on BSD system, set this terminal as out control terminal */
		ioctl(STDIN_FILENO,TIOCSCTTY);
#endif
		tcsetpgrp(STDIN_FILENO,me);
	}
	rc=tcgetattr(STDIN_FILENO,&savetios);
	if(rc)return ME_ATTRS;
	memcpy(&tios,&savetios,sizeof(tios));
	tios.c_cflag&=~(CSTOPB|PARENB|PARODD);
	tios.c_cflag|=CS8|CREAD|HUPCL|CLOCAL|HARDW_HS;
	tios.c_iflag=0;
	tios.c_oflag=0;
	tios.c_lflag=0;
	if(tspeed) {
		cfsetispeed(&tios,tspeed);
		cfsetospeed(&tios,tspeed);
		/* Speed is zero on answer, and we don't want to flush incoming EMSI_DAT */
		tcflush(STDIN_FILENO,TCIFLUSH);
	}
	tios.c_cc[VTIME]=0;
	tios.c_cc[VMIN]=1;
	rc=tcsetattr(STDIN_FILENO,TCSANOW,&tios);
	return rc?ME_ATTRS:0;
}
Exemple #12
0
int
ItsyOsInit (void)
{
    pid_t		sid;
    int			i;
    itsy_session_info	info;

    if (itsySessionFd < 0)
    {
	itsySessionFd = open ("/dev/session", 0);
	ErrorF("itsySessionFD %d\n", itsySessionFd);
    }
    
    (void) setsid ();
    sid = getsid (0);
    ErrorF ("Session ID %d PID %d\n", sid, getpid ());
    info.sid = sid;
    strcpy (info.name, "X");
    if (itsySessionFd >= 0)
    {
	i = ioctl (itsySessionFd, SESSION_SET_INFO, &info);
	if (i < 0)
	    perror ("SESSION_SET_INFO");
    }
    return 1;
}
Exemple #13
0
int main(int argc, char **argv)
{
  //pid_t getpid(void);
  //pid_t getppid(void);
  fprintf(stdout, "PID: %d, PPID: %d\n", getpid(), getppid());

  //uid_t getuid(void);
  //uid_t geteuid(void);
  fprintf(stdout, "Real UID: %d, Effective UID: %d\n", getuid(), geteuid());

  //gid_t getgid(void);
  //gid_t getegid(void);

  fprintf(stdout, "Real GID: %d, Effective GID: %d\n", getgid(), getegid());

  //pid_t getpgid(pid_t pid);
  fprintf(stdout, "PGID: %d\n", getpgid(0));

  //pid_t getsid(pid_t pid);
  fprintf(stdout, "SID: %d\n", getsid(0));

  // No method to get saved set-user-id value
  // No method to saved set-group-id value

  // Get list of supplementary group IDs
  //int getgroups(int size, gid_t list[]);

  //sleep(1000);

  return 0;
}
Exemple #14
0
char* _prisma_trytogettermname() {
    static char _prisma_termname[_PRISMA_TERMNAME_LENGTH];

#ifdef _PRISMA_LINUX 
    char *tmp = getnameof(getppidof(getsid(getpid())));
    if(tmp) {
        strncpy(_prisma_termname, tmp, _PRISMA_TERMNAME_LENGTH);
        if(!strncmp(_prisma_termname, "initdline", _PRISMA_TERMNAME_LENGTH)
        || !strncmp(_prisma_termname, "konsole", _PRISMA_TERMNAME_LENGTH))
            return _prisma_termname;
    } 

#ifdef _GNU_SOURCE
    strncpy(_prisma_termname, secure_getenv("TERM"), _PRISMA_TERMNAME_LENGTH);
#else
    strncpy(_prisma_termname, getenv("TERM"), _PRISMA_TERMNAME_LENGTH);
#endif

#elif defined _PRISMA_WINDOWS
    if(GetConsoleOriginalTitleA(&_prisma_termname[9], 
                _PRISMA_TERMNAME_LENGTH-9)) {
        strncpy(_prisma_termname, "windows, ", 9);
    } else
        strncpy(_prisma_termname, "windows, unknown", _PRISMA_TERMNAME_LENGTH);
#else
    strncpy(_prisma_termname, "unknown", _PRISMA_TERMNAME_LENGTH);
#endif

    return _prisma_termname;
}
Exemple #15
0
static int
check_sid (void)
{
    pid_t my_sid, old_sid;
    const char *sid_str;
    int r;

    sid_str = getenv ("MC_SID");
    if (!sid_str)
        return 0;

    old_sid = (pid_t) strtol (sid_str, NULL, 0);
    if (!old_sid)
        return 0;

    my_sid = getsid (0);
    if (my_sid == -1)
        return 0;

    /* The parent mc is in a different session, it's OK */
    if (old_sid != my_sid)
        return 0;

    r = query_dialog (_("Warning"),
                      _("GNU Midnight Commander is already\n"
                        "running on this terminal.\n"
                        "Subshell support will be disabled."), D_ERROR, 2, _("&OK"), _("&Quit"));
    if (r != 0)
    {
        return 2;
    }

    return 1;
}
Exemple #16
0
/* this function attaches our app to the specified tty */
bool open_tty(const char tty[])
{
  /* setsid disconnects us from any controlling terminals */
  if(-1 == setsid() && getsid(0) != getpid())
    fail_and_bail("Couldn't make ourselves a new session");

  if(-1 == close(0))
    fail_and_bail("Couldn't close stdin"); /* <-- that's zero */

  /* open will return the  lowest free file descriptor.
   * we just closed 0 (stdin) */
  if(0 != open(tty,O_RDWR))
    fail_and_bail("Didn't assign the tty to stdin");
  dup2(0,1); /* stdout */
  dup2(0,2); /* stderr */

  /* i'm leaving this here, in case it's needed for portability,
   * but consider the reverse implication of O_NOCTTY
  const int steal_the_tty=1;
  if(-1 == ioctl(0,TIOCSCTTY, steal_the_tty))
    fail_and_bail("Couldn't steal the tty");

  fflush(NULL);
  */
  return true;
}
Exemple #17
0
int main(void)
{
	pid_t     pid;
	int ret;
	
	if ((pid = fork()) < 0) 
	{
		perror("fork error");
		exit(1);
	} 
	else if (pid == 0)  // child 
	{     			
		ret = setpgid(getpid(), 21933);
		assert(ret == 0);
	}
	else 
	{
		sleep(2);               // parent 
	}

	while(1)
	{
		printf("pid %d process in the %d gp, %d session\n",getpid(), getpgrp(), getsid(0));
		sleep(3);
	}
	
	return 0;
}
Exemple #18
0
/*
 * TODO: set the supplementary group vector to 
 * the list of groups the user is in. 
 * use setgroups(2) and get Groups entry from /proc<pid>/status.
 */
int armour_proc_set_param (armour_proc *p, pid_t pid)
{
    p->pid = pid;
    errno = 0;

    armour_proc_set_param_environ (p, NULL);
    armour_proc_set_param_cmdline (p, NULL);
    armour_proc_set_param_cwd (p, NULL);
    armour_proc_set_param_root (p, NULL);
    armour_proc_set_param_io (p, NULL);
    armour_proc_set_param_ugid (p, NULL);
    armour_proc_set_param_comm (p, NULL);
    
    if (pid == getsid (pid)) {
        p->flags |= ARPROC_SETSID;
    }

    // TODO: remove. This is unnecessary once we add 
    // syslog or whatever logging facility
    // plus doesnt need to be a per-process feature
#ifdef DEBUG
    p->flags |= ARPROC_VERBOSE;
#endif
    
    if (errno) {
        /* something went wrong */
        armour_proc_free_param (p);
        return -1;
    }

    if (p->flags & ARPROC_VERBOSE)
        armour_proc_dump (p, NULL);

    return 0;
}
Exemple #19
0
int main(int argc, char **argv)
{
	int fd, len, ret;
	sigset_t mask;
	int sig;

	if (getsid(0) != getpid())
		return 1;

	sigemptyset(&mask);
	sigaddset(&mask, SIGINT);
	sigprocmask(SIG_BLOCK, &mask, NULL);
	write(1, "ok\n", 3);

	sigwait(&mask, &sig);

	/* usage: piggy file_name data_to_put_there */
	if (argc < 3)
		return 1;

	fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0600);
	if (fd < 0)
		return 1;

	len = strlen(argv[2]);
	ret = write(fd, argv[2], len);
	close(fd);

	if (ret != len) {
		unlink(argv[1]);
		return 1;
	}

	return 0;
}
Exemple #20
0
void dmtcp::ProcessInfo::refresh()
{
  _pid = getpid();
  _ppid = getppid();
  _gid = getpgid(0);
  _sid = getsid(0);

  _fgid = -1;
  dmtcp::string controllingTerm = jalib::Filesystem::GetControllingTerm();
  if (!controllingTerm.empty()) {
    int tfd = _real_open(controllingTerm.c_str(), O_RDONLY, 0);
    if (tfd >= 0) {
      _fgid = tcgetpgrp(tfd);
      _real_close(tfd);
    }
  }

  if (_ppid == 1) {
    _isRootOfProcessTree = true;
  }

  _procname = jalib::Filesystem::GetProgramName();
  _hostname = jalib::Filesystem::GetCurrentHostname();
  _upid = UniquePid::ThisProcess();
  _uppid = UniquePid::ParentProcess();
  _noCoordinator = dmtcp_no_coordinator();

  refreshChildTable();
  refreshTidVector();

  JTRACE("CHECK GROUP PID")(_gid)(_fgid)(_ppid)(_pid);
}
Exemple #21
0
int main(int argc, char **argv)
{
	int ret=0;
	struct cmd_t *pcmd = NULL;
	int idx = 0;

	printf("sid: %d  pgid: %d  pid: %d  ppid: %d \n", getsid(0), getpgid(0), getpid(), getppid());	
	if(argc >= 2)
	{
		if( strcmp(argv[1], "-h") == 0 )
			wftool_usage();
		else if( strcmp(argv[1], "help") == 0 )
			print_usage(argv[2]);
		else{
			for(idx=0; idx<ARRAY_NUM(cmd_list); idx++){
				if(strcmp(argv[1], cmd_list[idx].cmd) == 0){
					pcmd = &cmd_list[idx];
				}
			}
		}

		if(pcmd)
			pcmd->cmd_call(argc, argv);
		else
			wftool_usage();
	}
	else{
		wftool_usage();
	}

	return ret;
}
Exemple #22
0
int main(void){
	pid_t pid;
	/*print the parent pid,pgid*/
	printf("father's pid is %d,pgid is %d\n",getpid(),getpgid(0));
	if((pid=fork())<0){/*fork child process*/
		printf("fork error\n");
		exit(1);
	}else if(pid==0){/*child*/
		/*print the child pid,pgid*/
		printf("before set, child's pid is %d,pgid is %d\n", getpid(), getpgid(0));
		if(setsid() < 0){/*create new session*/
			printf("setsid error\n");
			exit(-1);
		}
		printf("sid is %d\n", getsid(0));/*see session id*/
		/*check child has controll termination or not.*/
		if(open("/dev/tty", O_RDWR) < 0){
			printf("open error\n");
			exit(1);
		}
		exit(0);
	}
	if(waitpid(pid,NULL,0) < 0){
		err_sys("wait error");
	}
	/*check parent has controll termination or not.*/
	if(open("/dev/tty", O_RDWR) < 0){
		printf("open error\n");
		exit(1);
	}else{
		printf("father open ok\n");
	}
	exit(0);
}
Exemple #23
0
int main(int argc, char* argv[]){
	struct sigaction sa;

	setbuf(stdout,NULL);

	sigemptyset(&sa.sa_mask);
	sa.sa_flags=0;
	sa.sa_handler=handler;
	if(sigaction(SIGHUP,&sa,NULL)==-1){
		perror("sigaction");
	}

	pid_t childPid;
	childPid=fork();
	if(childPid==-1){
		perror("fork");
	}
	if(childPid==0&&argc>1){
		if(setpgid(0,0)==-1){
			perror("setpgid");
		}
	}
	printf("PID=%d|PPID=%d|PGID=%d|SID=%d\n",getpid(),getppid(),getpgrp(),getsid(0));

	alarm(3);

	for(;;){
		pause();
		printf("%d: caught SIGHUP\n",getpid());
	}
	return 0;

}
int main(){

	pid_t f;
	pid_t pid, ppid, pgid, sid;
	struct rlimit rl;
	char buf[100];	
	
	f = fork();
	if(f == -1) /*Error*/
		perror("ERROR FORK.\n");
	else if(f == 0) /*Hijo*/
	{
		printf("Nueva sesión: %d\n", setsid());
		chdir("/tmp");
		pid = getpid();
		ppid = getppid();
		pgid = getpgid(pid);
		sid = getsid(pid);
		printf("Pid del proceso: %d\n", pid);
		printf("Pid del padre del proceso: %d\n", ppid);
		printf("Pid del grupo: %d\n", pgid);
		printf("Pid de sesión: %d\n", sid);
		printf("Máximo tamaño de archivo (bytes): %d\n", getrlimit(RLIMIT_FSIZE, &rl));
		printf("Directorio de tamaño actual: %s\n", getcwd(buf, 100));
		
	}

	else {/*Padre*/}

	return 0;
}
int main (int argc, char * argv[])
{
	int i, status, lsockfd, csockfd;  /* local/connection socket file descriptor */
	struct sockaddr_in raddr;      /* remote address object */
	socklen_t raddr_len = sizeof (struct sockaddr_in);
	pthread_t connThread;   /* thread identifier */
	User_Settings * o_stngs; /* user suplied settings struct (stores user settings)*/

	/* set global variables */
	server = "simpleText";
	version = 1.0f;

	/* allocate user suplied settings struct */
	o_stngs = malloc(sizeof(User_Settings));

	/* read configuration file */
	read_conf_file (o_stngs);

	/* parse and set cli options */
	parse_cli_opts (argc, (char **) &argv[0], o_stngs);

	/* make daemon and start logging */
	status = init_daemon (server, o_stngs);
	if (status == 0)
		return EXIT_SUCCESS; /* parent returns success */
	else if (status == 1)
		return EXIT_FAILURE; /* parent returns failure */

	syslog (LOG_NOTICE, "[PID: %u, SID: %u] > %s started..",
					getpid (), getsid (getpid ()), server);

	/* Read Hosts File */
	host_cnt = read_host_file (NULL, 1);
	for (i = 0; i < host_cnt; i++)
		read_host_file (&o_vhost[i], 0);

	/* start listening for TCP connections */
	lsockfd = start_listen (o_stngs->port);
	free(o_stngs);

	/* loop through accepting and handling connections */
	while (1)
	{
		/* accept connection or skip to next conection if accept fails */
		csockfd = accept (lsockfd, (struct sockaddr *) &raddr, &raddr_len);
		if (csockfd == -1) /* if connection fails ignore it and continue */
			continue;

		Connect_Args * o_args = malloc(sizeof(Connect_Args *));
		o_args->socket = csockfd;
		strcpy (o_args->client_addr, inet_ntoa (raddr.sin_addr));

		/* create thread to handle connection */
		pthread_create(&connThread, NULL, (void *) &attent_connection, o_args);

		/* wait for one second before accepting next connection */
		sleep (1);
	}
}
Exemple #26
0
/* On some systems (SGI IRIX 6), process exit sometimes kills all processes
 * in the process GROUP.  This code attempts to fix that.  
 * We DON'T do it if stdin (0) is connected to a terminal, because that
 * disconnects the process from the terminal.
 * ------------------------------------------------------------------------ */
void MPIE_CreateNewSession( void )
{
#if defined(HAVE_SETSID) && defined(HAVE_ISATTY) && \
    defined(USE_NEW_SESSION) && defined(HAVE_GETSID)
#ifdef NEEDS_GETSID_DECL
pid_t getsid(pid_t);
#endif
if (!isatty(0) && !isatty(1) && !isatty(2) && getsid(0) != getpid()) {
    pid_t rc;
    /* printf( "Creating a new session\n" ); */
/*    printf( "Session id = %d and process id = %d\n", getsid(0), getpid() );*/
    MPIE_SYSCALL(rc,setsid,());
    if (rc < 0) {
	MPL_internal_sys_error_printf( "setsid", errno, 
				"Could not create new process group\n" );
	}
    }
void get_info(char* str_proc, pid_t pid)
{
    printf("%s\n", str_proc);
    printf("PPID: %ld\n", (long)getppid());
    printf(" PID: %ld\n", (long)getpid());
    printf(" SID: %ld\n", (long)getsid(pid));
    printf("PGID: %ld\n", (long)getpgid(pid));
}
Exemple #28
0
/*
 * sys_init - System-dependent initialization.
 */
void
sys_init()
{
    int x;

    openlog("pppd", LOG_PID | LOG_NDELAY, LOG_PPP);
    setlogmask(LOG_UPTO(LOG_INFO));
    if (debug)
        setlogmask(LOG_UPTO(LOG_DEBUG));

    /* Get an internet socket for doing socket ioctl's on. */
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
        fatal("Couldn't create IP socket: %m");

    if (default_device)
        tty_sid = getsid((pid_t)0);

    /*
     * Open the ppp device.
     */
    pppfd = open("/dev/streams/ppp", O_RDWR | O_NONBLOCK, 0);
    if (pppfd < 0)
        fatal("Can't open /dev/streams/ppp: %m");
    if (kdebugflag) {
        x = PPPDBG_LOG + PPPDBG_DRIVER;
        strioctl(pppfd, PPPIO_DEBUG, &x, sizeof(int), 0);
    }

    /* Assign a new PPA and get its unit number. */
    if (strioctl(pppfd, PPPIO_NEWPPA, &ifunit, 0, sizeof(int)) < 0)
        fatal("Can't create new PPP interface: %m");

    /*
     * Open the ppp device again and push the if_ppp module on it.
     */
    iffd = open("/dev/streams/ppp", O_RDWR, 0);
    if (iffd < 0)
        fatal("Can't open /dev/streams/ppp (2): %m");
    if (kdebugflag) {
        x = PPPDBG_LOG + PPPDBG_DRIVER;
        strioctl(iffd, PPPIO_DEBUG, &x, sizeof(int), 0);
    }
    if (strioctl(iffd, PPPIO_ATTACH, &ifunit, sizeof(int), 0) < 0)
        fatal("Couldn't attach ppp interface to device: %m");
    if (ioctl(iffd, I_PUSH, "if_ppp") < 0)
        fatal("Can't push ppp interface module: %m");
    if (kdebugflag) {
        x = PPPDBG_LOG + PPPDBG_IF;
        strioctl(iffd, PPPIO_DEBUG, &x, sizeof(int), 0);
    }
    if (strioctl(iffd, PPPIO_NEWPPA, &ifunit, sizeof(int), 0) < 0)
        fatal("Couldn't create ppp interface unit: %m");
    x = PPP_IP;
    if (strioctl(iffd, PPPIO_BIND, &x, sizeof(int), 0) < 0)
        fatal("Couldn't bind ppp interface to IP SAP: %m");

    n_pollfds = 0;
}
Exemple #29
0
Fichier : ps.c Projet : Ana06/OS
int main(int argc, char** argv){
	printf("Id: %i\n",getpid());
	printf("Group id: %i\n",getpgid(0));
	printf("Session id: %i\n",getsid(0));
	struct rlimit rlim;
	getrlimit(RLIMIT_NOFILE,&rlim);
	printf("Number of files that can open the process: %i\n",rlim.rlim_cur); //soft limit, también hay un hard limit (rlimit_max)
	printf("Actual directory: %s\n",getcwd(NULL,0));
}
Exemple #30
0
int main(int argc, char* argv[]) {
  pid_t sid = getsid(0);
  atomic_printf("getsid(0) session ID: %d\n", sid);
  test_assert(sid > 0);

  atomic_puts("EXIT-SUCCESS");

  return 0;
}