精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux后臺開發中避免僵尸進程的方法總結

開發 前端
一般情況下,程序調用exit(包括_exit和_Exit,它們的區別這里不做解釋),它的絕大多數內存和相關的資源已經被內核釋放掉,但是在進程表中這個進程項(entry)還保留著(進程ID,退出狀態,占用的資源等等)

 一、什么是僵死進程?

一般情況下,程序調用exit(包括_exit和_Exit,它們的區別這里不做解釋),它的絕大多數內存和相關的資源已經被內核釋放掉,但是在進程表中這個進程項(entry)還保留著(進程ID,退出狀態,占用的資源等等),你可能會問,為什么這么麻煩,直接釋放完資源不就行了嗎?這是因為有時它的父進程想了解它的退出狀態。在子進程退出但還未被其父進程“收尸”之前,該子進程就是僵死進程,或者僵尸進程。如果父進程先于子進程去世,那么子進程將被init進程收養,這個時候init就是這個子進程的父進程。

所以一旦出現父進程長期運行,而又沒有顯示調用wait或者waitpid,同時也沒有處理SIGCHLD信號,這個時候init進程就沒有辦法來替子進程收尸,這個時候,子進程就真的成了“僵尸”了。

二、僵死進程與孤兒進程的區別?

回答這個問題很簡單,就是爸爸(父進程)和兒子(子進程)誰先死的問題!

如果當兒子還在世的時候,爸爸去世了,那么兒子就成孤兒了,這個時候兒子就會被init收養,換句話說,init進程充當了兒子的爸爸,所以等到兒子去世的時候,就由init進程來為其收尸。

如果當爸爸還活著的時候,兒子死了,這個時候如果爸爸不給兒子收尸,那么兒子就會變成僵尸進程。

三、僵死進程的危害?

  1. 僵死進程的PID還占據著,意味著海量的子進程會占據滿進程表項,會使后來的進程無法fork.
  2. 僵死進程的內核棧無法被釋放掉(1K 或者 2K大小),為啥會留著它的內核棧,因為在棧的最低端,有著thread_info結構,它包含著 struct_task 結構,這里面包含著一些退出信息。

四、避免僵死進程的方法

網上搜了下,總結有三種方方法:

① 程序中顯示的調用signal(SIGCHLD, SIG_IGN)來忽略SIGCHLD信號,這樣子進程結束后,由內核來wai和釋放資源

② fork兩次,第一次fork的子進程在fork完成后直接退出,這樣第二次fork得到的子進程就沒有爸爸了,它會自動被老祖宗init收養,init會負責釋放它的資源,這樣就不會有“僵尸”產生了

③ 對子進程進行wait,釋放它們的資源,但是父進程一般沒工夫在那里守著,等著子進程的退出,所以,一般使用信號的方式來處理,在收到SIGCHLD信號的時候,在信號處理函數中調用wait操作來釋放他們的資源。

五、對每個避免僵死進程方法的解析與總結

首先我們讓我們來看一個生成僵尸進程的程序zombie.c如下:

  1. #include <stdio.h>   
  2. #include <stdlib.h>  #include <unistd.h>    int main(int argc, const char *argv[])   
  3. {      int i;   
  4.     pid_t pid;        for (i = 0; i < 10; i++) {   
  5.         if ((pid = fork()) == 0)    /* child */   
  6.             _exit(0);   
  7.     }      sleep(10);   
  8.       exit(EXIT_SUCCESS);  }   

運行程序,在10s睡眠期間使用ps查看進程,你會發現有10個標記為“defunct”的僵尸進程:

linux后臺開發中避免僵尸進程的方法總結

接下來看第一種方法,程序avoid_zombie1.c如下:

  1. #include <stdio.h>   
  2. #include <stdlib.h>  #include <signal.h>  #include <unistd.h>  #include <errno.h>    int main(int argc, const char *argv[])   
  3. {      pid_t pid;        if (SIG_ERR == signal(SIGCHLD, SIG_IGN)) {   
  4.         perror("signal error");   
  5.         _exit(EXIT_FAILURE);      }        while (1) {   
  6.         if ((pid = fork()) == 0)    /* child */   
  7.             _exit(0);   
  8.     }        exit(EXIT_SUCCESS);  }   

程序運行期間通過ps命令的確沒有發現僵尸進程的存在。

在man文檔中有這段話:

Note that even though the default disposition of SIGCHLD is "ignore", explicitly setting the disposition to SIG_IGN results in different treatment of zombie process children.

意思是說盡管系統對信號SIGCHLD的默認處理就是“ignore”,但是顯示的設置成SIG_IGN的處理方式在在這里會表現不同的處理方式(即子進程結束后,資源由系統自動收回,所以不會產生僵尸進程),這是信號SIGCHLD與其他信號的不同之處。

在man文檔中同樣有這樣一段話:

The original POSIX standard left the behavior of setting SIGCHLD to SIG_IGN unspecified. 看來這個方法不是每個平臺都使用,尤其在一些老的系統中,兼容性不是很好,所以如果你在寫一個可移植的程序的話,不推薦使用這個方法。

第二種方法,即通過兩次fork來避免僵尸進程,我們來看一個例子avoid_zombie2.c:

  1. #include <stdio.h>   
  2. #include <stdlib.h>  #include <signal.h>  #include <unistd.h>  #include <errno.h>    int main(int argc, const char *argv[])   
  3. {      pid_t pid;        while (1) {   
  4.         if ((pid = fork()) == 0) {  /* child */   
  5.             if ((pid = fork()) > 0)   
  6.                 _exit(0);   
  7.             sleep(1);   
  8.             printf("grandchild, parent id = %ld\n",   
  9.                             (long)getppid());              _exit(0);   
  10.         }          if (waitpid(-1, NULL, 0) != pid) {   
  11.             perror("waitpid error");   
  12.             _exit(EXIT_FAILURE);          }      }        exit(EXIT_SUCCESS);  }   

這的確是個有效的辦法,但是我想這個方法不適宜網絡并發服務器中,應為fork的效率是不高的。

最后來看第三種方法, 也是最通用的方法

先看我們的測試程序avoid_zombie3.c

  1. #include <stdio.h>   
  2. #include <stdlib.h>  #include <errno.h>  #include <string.h>   
  3. #include <libgen.h>  #include <signal.h>  #include <unistd.h>  #include <sys/wait.h>  #include <sys/types.h>      void avoid_zombies_handler(int signo)   
  4. {      pid_t pid;      int exit_status;   
  5.     int saved_errno = errno;   
  6.       while ((pid = waitpid(-1, &exit_status, WNOHANG)) > 0) {   
  7.         /* do nothing */   
  8.     }        errno = saved_errno;  }    int main(int argc, char *argv[])   
  9. {      pid_t pid;      int status;   
  10.     struct sigaction child_act;    
  11.       memset(&child_act, 0, sizeof(struct sigaction));   
  12.     child_act.sa_handler = avoid_zombies_handler;      child_act.sa_flags = SA_RESTART | SA_NOCLDSTOP;       sigemptyset(&child_act.sa_mask);      if (sigaction(SIGCHLD, &child_act, NULL) == -1) {   
  13.         perror("sigaction error");   
  14.         _exit(EXIT_FAILURE);      }        while (1) {   
  15.         if ((pid = fork()) == 0) {  /* child process */   
  16.             _exit(0);   
  17.         } else if (pid > 0) {        /* parent process */   
  18.         }      }            _exit(EXIT_SUCCESS);  }   

首先需要知道三點:

1. 當某個信號的信號處理函數被調用時,該信號會被操作系統阻塞(默認sa_flags不設置SA_NODEFER標志)。

2.當某個信號的信號處理函數被調用時,該信號阻塞時,該信號又多次發生,那么操作系統并不將它們排隊,而是只保留第一次的,后續的被拋棄。

還有一點我們必須清楚的是

3. wait系列函數與信號SIGCHLD是沒有任何關系的,即wait系列函數并不是信號SIGCHLD驅動的。

這個時候,肯定有人有疑問了,既然會丟棄信號,那怎么保證可以收回所有的僵尸進程呢?

關于這個問題,我們可以這樣來理解,當子進程結束時,不管有沒有產生SIGCHLD信號,或者子進程產生了SIGCHLD信號,而不管父進程有沒有收到SIGCHLD信號,這都與子進程已經終止這個事實無關,就是說,子進程終止與信號其實沒有任何關系,只是操作系統在子進程終止時會發送信號SIGCHLD給父進程,告之其子進程終止的消息,這樣的話,父進程就可以做相應的操作了。而wait系列函數的目的就是收回子進程終止時殘留在進程列表中的信息,所以任何時候調用while ((pid = waitpid(-1, &exit_status, WNOHANG)) > 0)都可以收回所有的僵尸進程信息(可以參考下面的程序)。但是這里為什么放在信號處理函數中處理了,這樣做的原因是:子進程什么時候結束是個異步事件,而信號機制就是用來處理異步事件的,所以當子進程結束時,可以迅速的收回其殘余信息,這樣系統中就不會積累大量的僵尸進程了。

也可以這樣來理解:系統把所有的僵尸進程串在一起形成一個僵尸進程鏈表,而while ((pid = waitpid(-1, &exit_status, WNOHANG)) > 0)就是來清空這個鏈表的,直到waitpid()返回0,表明已經沒有僵尸進程了,或者返回-1,表明出錯(當錯誤碼errno為ECHILD的時候同樣表明已經不存在僵尸進程了)。

了解了以上知識點,就能理解為什么while ((pid = waitpid(-1, &exit_status, WNOHANG)) > 0)能夠回收所有的僵尸進程了。

我們可以在上面的信號處理函數中加入相應的打印信息:

  1. static int num1 = 0   
  2. static int num2 = 0;   
  3. void avoid_zombies_handler(int signo)   
  4. {      pid_t pid;   
  5.     int exit_status;   
  6.     int saved_errno = errno;   
  7.       printf("num1 = %d\n", ++num1);   
  8.     while ((pid = waitpid(-1, &exit_status, WNOHANG)) > 0) {   
  9.         printf("num2 = %d\n", ++num2);   
  10.     }        errno = saved_errno;  }   

打印的結果你會發現,當num1遞增1的時候,即每調用一次信號處理函數,num2一般會遞增很多,即while循環了很多次,所以盡管有的SIGCHLD信號被丟棄了,但是我們不用擔心子進程的殘余信息會收不回來。退出while循環時,證明此時系統中已經沒有僵尸進程了,所以退出信號處理函數后,阻塞的唯一SIGCHLD信號會再次觸發該信號處理函數,這樣我們就不用擔心了。我們不防做個最壞的打算,即之前的信號全部被丟棄了,只有最后一次的SIGCHLD信號被捕獲,從而觸發了信號處理函數,這樣我們也不用擔心,因為while循環會一次性收回全部的僵尸進程信息,只是這次循環的次數要多得多罷了,當然這只是假設,一般系統不會出現這樣的情況(可以參考本文最后一個程序事例)。

為了證明wait系統函數與信號SIGCHLD沒有任何關系,我們可以做個簡單的實驗,代碼如下:

  1. #include <stdio.h>   
  2. #include <stdlib.h>   
  3. #include <unistd.h>   
  4. #include <sys/wait.h>   
  5. #include <sys/types.h>   
  6.   int main(int argc, char *argv[])  {      int i;      pid_t pid;        for (i = 0; i < 5; i++) {   
  7.         if ((pid = fork()) == 0)    /* child */   
  8.             _exit(0);   
  9.     }   
  10.     sleep(10);   
  11.     while (waitpid(-1, NULL, WNOHANG) > 0) {   
  12.         /* do nothing */      }      sleep(10);        _exit(EXIT_SUCCESS);  }   

以下是打印結果:

linux后臺開發中避免僵尸進程的方法總結

可以看到第一次sleep時系統中積累了5個僵尸進程,第二次sleep時,那5個僵尸進程都被收回了。這個也明顯的看到了使用信號處理函數的優勢,即可以保證系統不會積累大量的僵尸進程,它可以迅速的清理掉系統中的僵尸進程。

責任編輯:張燕妮 來源: 今日頭條
相關推薦

2024-02-05 18:23:23

父進程應用程序程序

2021-11-06 10:17:38

Linux僵尸進程

2021-11-08 10:30:30

Linux僵尸命令

2021-10-25 12:23:06

Linux僵尸進程

2021-09-14 13:25:23

容器pod僵尸進程

2013-04-07 17:18:16

僵尸網絡變色龍

2024-05-23 08:24:11

Android進程開發

2022-02-10 15:25:47

LinuxIO優化

2017-03-17 16:10:24

linux進程后臺

2017-12-15 09:40:47

Linux僵尸進程

2013-03-15 10:48:14

創業創業公司

2022-07-28 11:09:44

Linux優化IO

2015-05-05 10:51:32

php頁面跳轉方法

2010-03-31 14:36:50

Oracle進程結構

2011-09-16 14:53:55

WLAN無線干擾

2024-08-26 08:39:26

PHP孤兒進程僵尸進程

2017-02-24 15:28:33

Android內存溢出方法總結

2021-11-01 12:13:53

Linux僵尸進程

2015-06-16 09:57:53

2010-06-28 14:52:30

cron進程
點贊
收藏

51CTO技術棧公眾號

国产精品乱码久久久久久| 亚洲女人在线观看| 国产福利在线看| 免费成人在线视频观看| 久久精品99久久久香蕉| 第一页在线视频| av综合电影网站| 国产精品福利一区| 国产精品theporn88| 老熟妇一区二区三区| 一区二区国产在线| 精品夜色国产国偷在线| 午夜精品久久久久久久99热影院| 高h视频在线播放| 久久久久久**毛片大全| 亚洲xxxx在线| 波多野结衣午夜| 欧美精品入口| 在线观看亚洲视频| 影音先锋人妻啪啪av资源网站| 成人国产精选| 亚洲成av人片在线观看无码| 亚洲午夜久久久影院伊人 | 欧美小视频在线| 在线免费观看成人网| 四虎在线观看| 高清日韩电视剧大全免费| 国产精品国产福利国产秒拍 | 欧美ab在线视频| 一区二区欧美日韩视频| 精品国产一区在线| 在线日韩成人| 91精品久久久久久久99蜜桃| 中文字幕第80页| 九色porny丨首页入口在线| 亚洲手机成人高清视频| 日本在线观看一区二区三区| 天天射天天操天天干| 国内成人自拍视频| 国产精品美女免费看| 全部毛片永久免费看| 欧美片第1页综合| 精品国产欧美一区二区三区成人| 成人免费av片| 欧美美女在线直播| 亚洲成人三级在线| 国产精品一区二区在线免费观看| 国产一区二区| 91.麻豆视频| 超碰人人草人人| 亚洲欧洲日韩精品在线| 欧美精品乱码久久久久久按摩| 亚洲欧美另类动漫| 日韩不卡视频在线观看| 在线观看视频一区| 人人爽人人av| h1515四虎成人| 欧美日韩一区二区在线观看 | 成人影院大全| 91久久精品一区二区三| 午夜免费一区二区| 福利一区在线| 欧美日韩国产a| 亚洲va综合va国产va中文| 日韩免费大片| 欧美美女激情18p| 久久精品亚洲天堂| 欧美视频精品全部免费观看| 日韩一区二区三区精品视频| 四虎国产精品永久免费观看视频| 久久丁香四色| 精品蜜桃在线看| 久久久久成人精品无码中文字幕| 欧美色图婷婷| 亚洲人午夜色婷婷| 美国精品一区二区| 在线中文字幕第一区| 麻豆国产精品va在线观看不卡 | 国产激情久久久| 亚洲天堂999| 国产一区二区不卡| 国产a一区二区| 日韩偷拍自拍| 国产精品久久久久久久久免费桃花| 亚洲一区bb| 在线免费观看的av| 午夜在线成人av| av五月天在线| 最新国产精品精品视频| 日韩精品在线观看视频| 九一在线免费观看| 伊人久久亚洲影院| 国产精品久久久久久久久久久新郎| 一区二区日韩视频| 成人av在线一区二区| 日本高清一区| 欧洲性视频在线播放| 日本道色综合久久| 无码人妻丰满熟妇啪啪网站| 激情综合网五月| 久久69精品久久久久久国产越南| 久久久免费高清视频| 国模大尺度一区二区三区| 国产在线观看一区| 日本暖暖在线视频| 欧美天天综合色影久久精品| 激情文学亚洲色图| 视频小说一区二区| 欧美成人小视频| 天天爽夜夜爽人人爽| 国产精品一区在线观看乱码 | 91精品在线一区| 性高潮久久久久久久久久| 国产精品久久久久一区二区三区 | 成人少妇影院yyyy| 亚洲欧洲精品一区二区三区波多野1战4| 麻豆福利在线观看| 欧美放荡的少妇| 国产精品成人一区二区三区电影毛片| 欧美视频亚洲视频| 成人亲热视频网站| 国产永久免费高清在线观看| 亚洲午夜影视影院在线观看| 在线黄色免费看| 国产成人短视频在线观看| 欧美国产日韩免费| 国产一区二区三区三州| 久久久精品免费网站| 欧美精品自拍视频| 欧美1区2区3| 久久精品国产综合| 中文字幕黄色av| 欧美经典三级视频一区二区三区| 成人免费在线小视频| 欧美激情三级| 不卡av日日日| 国产福利第一视频| ...中文天堂在线一区| 三级a三级三级三级a十八发禁止| 综合伊思人在钱三区| 久久久视频在线| 丰满人妻妇伦又伦精品国产| 一区二区三区在线观看欧美| 九九热精品国产| 欧美成人精品一区二区三区在线看| 国产成人精品优优av| 欧美人体大胆444www| 色呦呦国产精品| 香蕉网在线播放| 亚洲欧美网站| 欧美日韩国产免费一区二区三区| 国产自产自拍视频在线观看| 亚洲精品成人久久久| www.av麻豆| 91网址在线看| 成人免费无码av| 精品国内自产拍在线观看视频| 国产精品69久久| 成人在线免费视频| 欧美日韩色一区| 国产日产精品一区二区三区的介绍| 久久99国产精品免费网站| 宅男在线精品国产免费观看| 懂色av色香蕉一区二区蜜桃| 欧美乱大交xxxxx另类电影| 亚洲AV无码成人片在线观看| 亚洲高清免费在线| 182在线视频| 噜噜噜91成人网| 亚洲一区三区在线观看| 国产情侣一区在线| 97精品国产97久久久久久| 亚洲人妻一区二区| 在线中文字幕不卡| 国产精品精品软件男同| 国产成人啪午夜精品网站男同| 秋霞无码一区二区| 国产欧美日韩免费观看| 91精品中文在线| missav|免费高清av在线看| 亚洲精品大尺度| 最好看的日本字幕mv视频大全| 中文字幕一区二区在线播放| 国产调教打屁股xxxx网站| 99精品免费网| 一区二区不卡在线观看| 澳门成人av| 国产成人精品日本亚洲专区61| 69av在线| 亚洲电影天堂av| 伊人亚洲综合网| 亚洲午夜影视影院在线观看| 手机看片福利视频| 国产999精品久久久久久| 久久国产乱子伦免费精品| 99久久婷婷| 久久国产精品 国产精品| 欧美视频免费看| 亚洲97在线观看| 免费在线观看av| 日韩黄色高清视频| 国产尤物在线观看| 调教+趴+乳夹+国产+精品| 亚洲午夜精品久久久久久高潮| 国产a级毛片一区| 久久精品免费网站| 9色国产精品| 四虎精品欧美一区二区免费| 妖精视频一区二区三区免费观看| 亚洲一区中文字幕| 全球最大av网站久久| 久久久久久免费精品| 生活片a∨在线观看| 日韩av在线导航| 亚洲成人一级片| 欧美日韩国产精品成人| 亚洲av中文无码乱人伦在线视色| 一区二区三区中文字幕在线观看| 国产人妻大战黑人20p| 不卡的av网站| 国产人妻精品午夜福利免费| 激情综合色播激情啊| www.xxx亚洲| 99精品视频免费观看视频| 法国空姐在线观看免费| 精品美女视频| 欧美重口乱码一区二区| 六月丁香久久丫| 成人欧美一区二区| 99精品国产九九国产精品| 国产精品久久久久99| 欧美久久天堂| 久久久女女女女999久久| 羞羞视频在线免费国产| 精品国产一区二区三区久久狼黑人 | www.综合网.com| 久久97精品久久久久久久不卡| 欧美成年黄网站色视频| 伊人久久久久久久久久久| 日本一二三区在线视频| 亚洲国产精品免费| 秋霞视频一区二区| 精品三级av在线| 高潮毛片7777777毛片| 日韩女同互慰一区二区| aaaa一级片| 欧美一级欧美一级在线播放| 99国产精品99| 欧美一级艳片视频免费观看| 国产欧美一级片| 日韩一区二区三区免费看 | 日韩av在线导航| 四虎影院在线播放| 亚洲男人天堂视频| 国产乱视频在线观看| 国产一区二区激情| chinese偷拍一区二区三区| 在线观看国产欧美| 91社区在线高清| 日韩在线中文字| av小片在线| 另类图片亚洲另类| 国产网红在线观看| 欧美综合国产精品久久丁香| 日日av拍夜夜添久久免费| 国产精品久久77777| 国产人妖一区| 亚洲一区二区三区乱码aⅴ蜜桃女| 日韩精品一区二区三区中文在线| 国产精品.com| 免费欧美激情| 一区二区视频国产| 911精品美国片911久久久| 日本aa在线观看| 久久精品首页| 污污的网站免费| 成人夜色视频网站在线观看| 播金莲一级淫片aaaaaaa| 国产女人18毛片水真多成人如厕 | 国产色在线 com| 久久精品国产v日韩v亚洲| 性欧美ⅴideo另类hd| 97视频在线观看成人| 精品国模一区二区三区| 91九色偷拍| 亚洲人和日本人hd| 综合色婷婷一区二区亚洲欧美国产| 午夜精品偷拍| 成人精品小视频| 国产精品自产自拍| 97伦伦午夜电影理伦片| 亚洲日本一区二区| 欧美一区二区激情视频| 欧美美女激情18p| 五月婷婷狠狠干| 久久精品精品电影网| 亚洲黄色免费av| 亚洲一区二区三区视频| 九色成人国产蝌蚪91| 中文字幕一区综合| 国产日韩一区二区三区在线播放 | 国产性猛交╳xxx乱大交| 欧美日韩精品二区第二页| 色一情一乱一乱一区91av| 最近2019免费中文字幕视频三 | 成人福利免费观看| 日韩欧美国产大片| 7777在线视频| 老司机一区二区三区| 无码人妻丰满熟妇区毛片蜜桃精品 | 狼狼综合久久久久综合网| 日韩一区二区在线| 国产视频九色蝌蚪| 国产成人在线看| 久久精品色妇熟妇丰满人妻| 欧美性猛交xxxxx免费看| 亚洲精品成人电影| 久久久精品国产网站| 欧美成人黑人| 国产一区二区不卡视频在线观看| 五月精品视频| 国产九九在线视频| 91蝌蚪国产九色| 日本少妇久久久| 欧美一级欧美三级在线观看| 天堂中文8资源在线8| 国产精品 欧美在线| 看全色黄大色大片免费久久久| 国产亚洲精品久久久久久久| 韩国三级在线一区| 中文字幕乱码av| 欧美在线啊v一区| 国产午夜精品一区理论片| 97成人精品区在线播放| 风间由美性色一区二区三区四区| 8x8x华人在线| 九九在线精品视频| 亚洲激情图片网| 欧美色手机在线观看| 国产视频福利在线| 国产精品video| av亚洲在线观看| 国产主播中文字幕| 久久久久成人黄色影片| 欧美精品一二三四区| 亚洲精选在线观看| 日韩电影av| 色女人综合av| 麻豆国产欧美一区二区三区| 一级二级黄色片| 4438x成人网最大色成网站| 国产激情在线| 超碰97在线播放| 亚洲欧洲日本mm| 97人妻天天摸天天爽天天| 欧美日韩视频在线| 九色视频成人自拍| 国产精品自产拍在线观看| 日本不卡高清| 加勒比av中文字幕| 一区二区三区精品在线| 乱精品一区字幕二区| 性色av一区二区三区在线观看| 少妇精品导航| 欧美黑人又粗又大又爽免费| 国产精品免费视频观看| 国产精品人人爽| 欧美精品成人在线| 婷婷精品在线| 亚欧在线免费观看| 亚洲欧美日韩成人高清在线一区| 亚洲精品久久久久avwww潮水| 国内伊人久久久久久网站视频| 色天天色综合| 三上悠亚av一区二区三区| 一区二区三区日韩精品视频| 五月婷中文字幕| 国产精品中文字幕久久久| 欧美精品麻豆| 加勒比一区二区| 欧美日韩国产免费一区二区| 日本在线视频网址| 美国av一区二区三区| 久久99精品国产麻豆婷婷| 成人免费看片98| 国产午夜精品视频| 日本成人精品| 国产二区视频在线播放| 国产精品午夜在线观看| 午夜精品久久久久久久爽| 日本乱人伦a精品| 中文字幕一区二区三区乱码图片 | 视频小说一区二区| 久久人人爽av| 精品久久久久久久久久国产| 欧美成人xxx| 秋霞久久久久久一区二区| 国产精品亚洲一区二区三区在线 | 一区二区三区短视频| 香蕉精品视频在线|