引数pidに指定したプロセスのセッションIDを取得可能。
#define _XOPEN_SOURCE 500 #include < unistd.h > #include < stdio.h > int main(){ pid_t sid; if ((sid = getsid(0))< 0){ perror("getsid"); return 1; } printf("sid = %d\n", (int)sid); return 0; }
随机应变 ABCD: Always Be Coding and … : хороший
引数pidに指定したプロセスのセッションIDを取得可能。
#define _XOPEN_SOURCE 500 #include < unistd.h > #include < stdio.h > int main(){ pid_t sid; if ((sid = getsid(0))< 0){ perror("getsid"); return 1; } printf("sid = %d\n", (int)sid); return 0; }
forkした後に親プロセス側は終了し、子プロセスがsetidを実行して、新しいセッションを作成。
#include#include #include int main() { pid_t pid; if ((pid = fork()) < 0){ perror("fork"); return 1; } else if(pid > 0){ _exit(0); } if (setsid() < 0){ perror("setsid"); return 1; } return 0; }
引数pid、引数pgidの両方にゼロを指定
#include < unistd.h > #include < stdio.h > int main() { if (setpgid(0, 0) < 0){ perror("setpgid"); return 1; } return 0; }
自分自身のプロセスループIDを取得し、それを表示
#define _XOPEN_SOURCE 500 #include < unistd.h > #include < stdio.h > int main() { pid_t pgid; if ((pgid = getpgid(0)) < 0){ perror("getpgid"); return 1; } printf("pgid = %d\n", (int)pgid); return 0; }
#include < sys/types.h > #include < unistd.h > #include < stdio.h > static void printuid() { printf("uid = %d euid = %d\n", (int)getuid(), (int)geteuid()); } int main() { uid_t uid, euid; uid = getuid(); euid = geteuid(); printuid(); if (seteuid(uid) < 0){ perror("seteuid"); return 1; } printuid(); if (seteuid(euid)<0){ perror("seteuid"); return 1; } printuid(); return 0; }
#include < sys/types.h > #include < unistd.h > #include < stdio.h > static void printuid() { printf("uid = %d euid = %d\n", (int)getuid(),(int)geteuid()); } int main() { uid_t uid, euid; uid = getuid(); euid=geteuid(); printuid(); if(setuid(uid) < 0){ perror("setuid"); return 1; } printuid(); if(setuid(euid) < 0){ perror("setuid"); return 1; } printuid(); return 0; }
getuid/geteuid/getgid/getegidは、それぞれ自分のプロセスの実ユーザID、実行ユーザID、実グループID、実行グループIDを取得します。
#include < unistd.h > #include < sys/types.h > #include < stdio.h > int main() { uid_t uid, euid; gid_t gid, egid; uid = getuid(); euid = geteuid(); gid = getgid(); egid = getegid(); printf("uid = %d, euid = %d, gid = %d, egid = %d\n", (int)uid, (int)euid, (int)gid, (int)egid); return 0; }
#include < sys/time.h > #include < sys/resource.h > #include < errno.h > #include < stdio.h > int main(){ int pri; errno = 0; pri = getpriority(PRIO_PROCESS, 0); if (errno != 0){ perror("getpriority"); return 1; } printf("%d\n", pri); return 0; }
#include < unistd.h > #include < stdio.h > #include < stdlib.h > int main() { if (chdir("/tmp")< 0){ perror("chdir"); return 1; } system("pwd"); return 0; }
自分または親のプロセスID
#include < sys/types.h > #include < unistd.h > #includeint main() { pid_t pid, ppid; pid = getpid(); ppid = getppid(); printf("pid = %d, ppid = %d\n", (int)pid, (int)ppid); return 0; }