setpgid() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於TP  

setpgid() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

setpgid、getpgid、setpgrp、getpgrp - 設定/獲取程序組

語法

#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
int setpgrp(void);
pid_t getpgrp(void);

描述

setpgid() 將由 pid 指定的程序的程序組 ID 設定為 pgid。如果 pid 為零,則使用當前程序的程序 ID。如果 pgid 為零,則使用由 pid 指定的程序的程序 ID。如果 setpgid() 用於將程序從一個程序組移動到另一個程序組(如某些 shell 在建立管道時所做的那樣),則這兩個程序組都必須屬於同一個會話。在這種情況下,pgid 指定要加入的現有程序組,並且該組的會話 ID 必須與加入程序的會話 ID 匹配。

getpgid() 返回由 pid 指定的程序的程序組 ID。如果 pid 為零,則使用當前程序的程序 ID。

呼叫 setpgrp() 等效於 setpgid(0,0)

類似地,getpgrp() 等效於 getpgid(0)。每個程序組都是一個會話的成員,每個程序都是其程序組所屬會話的成員。

程序組用於訊號分發,並由終端來仲裁對輸入的請求:與終端具有相同程序組的程序位於前臺,並且可以讀取,而其他程序如果嘗試讀取則會因訊號而阻塞。因此,這些呼叫由諸如 csh(1) 之類的程式在實現作業控制時用於建立程序組。termios(3) 中描述的 TIOCGPGRPTIOCSPGRP 呼叫用於獲取/設定控制終端的程序組。

如果會話具有控制終端,CLOCAL 未設定並且發生結束通話,則會話領導者將收到 SIGHUP 訊號。如果會話領導者退出,則 SIGHUP 訊號將傳送到控制終端的前臺程序組中的每個程序。

如果程序的退出導致程序組成為孤兒,並且如果新孤兒程序組的任何成員已停止,則 SIGHUP 訊號後跟 SIGCONT 訊號將傳送到新孤兒程序組中的每個程序。

返回值

成功時,setpgid() 和 setpgrp() 返回零。錯誤時,返回 -1,並且 errno 被相應地設定。

getpgid() 成功時返回程序組。錯誤時,返回 -1,並且 errno 被相應地設定。

getpgrp() 始終返回當前程序組。

錯誤

標籤描述
EACCES 嘗試更改呼叫程序子程序之一的程序組 ID,並且子程序已執行 execve() (setpgid()、setpgrp())。
EINVAL pgid 小於 0 (setpgid()、setpgrp())。
EPERM 嘗試將程序移動到不同會話中的程序組,或更改呼叫程序子程序之一的程序組 ID 且子程序位於不同會話中,或更改會話領導者的程序組 ID (setpgid()、setpgrp())。
ESRCH 對於 getpgid():pid 與任何程序都不匹配。對於 setpgid():pid 不是當前程序,也不是當前程序的子程序。

符合標準

函式 setpgid() 和 getpgrp() 符合 POSIX.1-2001。函式 setpgrp() 來自 4.2BSD。函式 getpgid() 符合 SVr4。

註釋

透過 fork(2) 建立的子程序繼承其父程序的程序組 ID。程序組 ID 在 execve(2) 中保留。

POSIX 從 BSD 函式 setpgrp() 中獲取了 setpgid()。此外,System V 具有同名的函式,但它與 setsid(2) 相同。

要在 glibc 下獲得原型,請同時定義 _XOPEN_SOURCE 和 _XOPEN_SOURCE_EXTENDED,或者對大於或等於 500 的某個整數 n 使用“#define _XOPEN_SOURCE n”。

參見



previous next Printer Friendly

廣告


  

廣告



廣告