標籤:linuxunix命令

wait英語中有等待的意思,在計算機領域她還帶是一種Java術語,C語言中也有wait命令。

概述

public final voidwait() throwsInterruptedException在其他線程調用此對象的notify()方法或notifyAll()方法前,導致當前線程等待。換句話說,此方法的行為就好像它僅執行 wait(0)調用一樣。 當前線程必須擁有此對象監視器。該線程發布對此監視器的所有權並等待,直到其他線程通過調用 notify方法,或 notifyAll方法通知在此對象的監視器上等待的線程醒來。然後該線程將等到重新獲得對監視器的所有權后才能繼續執行。 對於某一個參數的版本,實現中斷和虛假喚醒是可能的,而且此方法應始終在循環中使用: synchronized (obj) { while (<condition does not hold>) obj.wait(); ..拋出:IllegalMonitorStateException- 如果當前線程不是此對象監視器的所有者。InterruptedException- 如果在當前線程等待通知之前或者正在等待通知時,任何線程中斷了當前線程。在拋出此異常時,當前線程的中斷狀態被清除。
當前線程必須擁有此對象監視器。 此方法導致當前線程(稱之為 T)將其自身放置在對象的等待集中,然後放棄此對象上的所有同步要求。出於線程調度目的,在發生以下四種情況之一前,線程 T被禁用,且處於休眠狀態: 其他某個線程調用此對象的 notify方法,並且線程 T碰巧被任選為被喚醒的線程。
大約已經到達指定的實際時間。但是,如果 timeout為零,則不考慮實際時間,在獲得通知前該線程將一直等待。
然後,從對象的等待集中刪除線程T,並重新進行線程調度。然後,該線程以常規方式與其他線程競爭,以獲得在該對象上同步的權利;一旦獲得對該對象的控制權,該對象上的所有其同步聲明都將被恢復到以前的狀態,這就是調用 wait方法時的情況。然後,線程T從 wait方法的調用中返回。所以,從 wait方法返回時,該對象和線程T的同步狀態與調用 wait方法時的情況完全相同。 在沒有被通知、中斷或超時的情況下,線程還可以喚醒一個所謂的虛假喚醒(spurious wakeup)。雖然這種情況在實踐中很少發生,但是應用程序必須通過以下方式防止其發生,即對應該導致該線程被提醒的條件進行測試,如果不滿足該條件,則繼續等待。

1參數

此方法類似於一個參數的 wait方法,但它允許更好地控制在放棄之前等待通知的時間量。用毫微秒度量的實際時間量可以通過以下公式計算出來: 1000000*timeout+nanos在其他所有方面,此方法執行的操作與帶有一個參數的wait(long)方法相同。需要特別指出的是,wait(0, 0)與 wait(0)相同。
timeout毫秒值與 nanos毫微秒參數值之和指定的超時時間已用完。
然後,該線程等到重新獲得對監視器的所有權后才能繼續執行。 對於某一個參數的版本,實現中斷和虛假喚醒是有可能的,並且此方法應始終在循環中使用: synchronized (obj) { while (<condition does not hold>) obj.wait(timeout, nanos);參數:timeout- 要等待的最長時間(以毫秒為單位)。 nanos- 額外時間(以毫微秒為單位,範圍是 0-999999)。

2英文

wait [weIt]
n. 等待, 等待時間
v. 等, 耽擱, 等候; 等候, 延緩, 期待

3函數

wait(等待子進程中斷或結束)
相關函數 waitpid,fork
表頭文件
#include<sys/types.h>
#include<sys/wait.h>
定義函數 pid_t wait (int * status);
函數說明
wait()會暫時停止進程的執行,直到有信號來到或子進程結束。如果在調用wait()時子進程已經結束,則wait()會立即返回子進程結束狀態值。子進程的結束狀態值會由參數status 返回,而子進程的進程識別碼也會一起返回。如果不在意結束狀態值,則參數status 可以設成NULL。子進程的結束狀態值請參考下面的waitpid()。
返回值
如果執行成功則返回子進程識別碼(PID),如果有錯誤發生則返回-1。失敗原因存於errno 中。
附加說明
範例
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
main()
pid_t pid;
int status,i;
if(fork()= =0){
printf(「This is the child process .pid =%d\n」,getpid());
exit(5);
}else{
sleep(1);
printf(「This is the parent process ,wait for child...\n」;
pid=wait(&status);
i=WEXITSTATUS(status);
printf(「child』s pid =%d .exit status=%d\n」,pid,i);
執行
This is the child process.pid=1501
This is the parent process .wait for child...
child』s pid =1501,exit status =5
waitpid(等待子進程中斷或結束)
相關函數 wait,fork
表頭文件
#include<sys/types.h>
#include<sys/wait.h>
定義函數 pid_t waitpid(pid_t pid,int * status,int options);
函數說明
waitpid()會暫時停止進程的執行,而子進程的進程識別碼也會一快返回。如果不在意結束狀態值,則參數status 可以設成NULL。參數pid 為欲等待的子進程識別碼,其他數值意義如下:

4用途

等待直到一個進程標識終止。

5語法

wait [ ProcessID ... ]
表示狀態,時間的延續。

6描述

wait 命令等待(暫停執行)直到由ProcessID 變數指定的進程標識終止。如果沒有指定ProcessID 變數,wait 命令會等待直到調用 shell 的所有已知進程標識終止並且以0 為退出狀態退出。如果ProcessID 變數代表一個未知的進程標識,wait 命令會把它們視為以127 為退出狀態退出的已知進程標識。wait 命令以ProcessID 變數指定的上個進程標識的退出狀態退出。

7標誌

ProcessID 指定一個命令的無符號十進位整數進程標識,wait 命令會等待直到該進程標識終止。
退出狀態
如果指定一個或多個操作數,所有的操作數終止或不為調用 shell 所知,並且上個操作數指定的狀態是已知的,那麼 wait 命令的退出狀態與上個操作數指定的命令退出狀態信息相同。如果進程由於收到信號而異常終止,那麼退出狀態會大於128 並且與其它信號生成的退出狀態信息不同,儘管未指定確切的狀態值(請參閱 kill -l 命令選項)。否則,wait 命令會以以下值中的一個退出:
0 以無操作數方式調用 wait 命令,並且調用的 shell 所已知的所有進程標識已經終止。
1-126 wait 命令檢測到一個錯誤。
127 由上一個指定的ProcessID操作數所標識的命令是未知的。

8文件

/usr/bin/wait 包含 wait 命令。

在線觀看

  • Waitwait up harriet
以上內容來自於
上一篇[《赫德》]    下一篇 [伊麗莎白·泰勒]

相關評論

同義詞:暫無同義詞