亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jobs.c

?? android-w.song.android.widget
?? C
?? 第 1 頁 / 共 5 頁
字號:
      for (i = js.j_jobslots; i; i--)	if (jobs[i - 1])	  break;    }  else    {#if 0      /* This wraps around, but makes it inconvenient to extend the array */      for (i = js.j_lastj+1; i != js.j_lastj; i++)	{	  if (i >= js.j_jobslots)	    i = 0;	  if (jobs[i] == 0)	    break;	}	      if (i == js.j_lastj)        i = js.j_jobslots;#else      /* This doesn't wrap around yet. */      for (i = js.j_lastj ? js.j_lastj + 1 : js.j_lastj; i < js.j_jobslots; i++)	if (jobs[i] == 0)	  break;#endif    }  /* Do we need more room? */  /* First try compaction */  if ((interactive_shell == 0 || subshell_environment) && i == js.j_jobslots && js.j_jobslots >= MAX_JOBS_IN_ARRAY)    i = compact_jobs_list (0);  /* If we can't compact, reallocate */  if (i == js.j_jobslots)    {      js.j_jobslots += JOB_SLOTS;      jobs = (JOB **)xrealloc (jobs, (js.j_jobslots * sizeof (JOB *)));      for (j = i; j < js.j_jobslots; j++)	jobs[j] = (JOB *)NULL;    }  /* Add the current pipeline to the job list. */  if (the_pipeline)    {      register PROCESS *p;      int any_running, any_stopped, n;      newjob = (JOB *)xmalloc (sizeof (JOB));      for (n = 1, p = the_pipeline; p->next != the_pipeline; n++, p = p->next)	;      p->next = (PROCESS *)NULL;      newjob->pipe = REVERSE_LIST (the_pipeline, PROCESS *);      for (p = newjob->pipe; p->next; p = p->next)	;      p->next = newjob->pipe;      the_pipeline = (PROCESS *)NULL;      newjob->pgrp = pipeline_pgrp;      pipeline_pgrp = 0;      newjob->flags = 0;      /* Flag to see if in another pgrp. */      if (job_control)	newjob->flags |= J_JOBCONTROL;      /* Set the state of this pipeline. */      p = newjob->pipe;      any_running = any_stopped = 0;      do	{	  any_running |= PRUNNING (p);	  any_stopped |= PSTOPPED (p);	  p = p->next;	}      while (p != newjob->pipe);      newjob->state = any_running ? JRUNNING : (any_stopped ? JSTOPPED : JDEAD);      newjob->wd = job_working_directory ();      newjob->deferred = deferred;      newjob->j_cleanup = (sh_vptrfunc_t *)NULL;      newjob->cleanarg = (PTR_T) NULL;      jobs[i] = newjob;      if (newjob->state == JDEAD && (newjob->flags & J_FOREGROUND))	setjstatus (i);      if (newjob->state == JDEAD)	{	  js.c_reaped += n;	/* wouldn't have been done since this was not part of a job */	  js.j_ndead++;	}      js.c_injobs += n;      js.j_lastj = i;      js.j_njobs++;    }  else    newjob = (JOB *)NULL;  if (newjob)    js.j_lastmade = newjob;  if (async)    {      if (newjob)	{	  newjob->flags &= ~J_FOREGROUND;	  newjob->flags |= J_ASYNC;	  js.j_lastasync = newjob;	}      reset_current ();    }  else    {      if (newjob)	{	  newjob->flags |= J_FOREGROUND;	  /*	   *		!!!!! NOTE !!!!!  (chet@ins.cwru.edu)	   *	   * The currently-accepted job control wisdom says to set the	   * terminal's process group n+1 times in an n-step pipeline:	   * once in the parent and once in each child.  This is where	   * the parent gives it away.	   *	   * Don't give the terminal away if this shell is an asynchronous	   * subshell.	   *	   */	  if (job_control && newjob->pgrp && (subshell_environment&SUBSHELL_ASYNC) == 0)	    maybe_give_terminal_to (shell_pgrp, newjob->pgrp, 0);	}    }  stop_making_children ();  UNBLOCK_CHILD (oset);  return (newjob ? i : js.j_current);}/* Functions to manage the list of exited background pids whose status has   been saved. */static struct pidstat *bgp_alloc (pid, status)     pid_t pid;     int status;{  struct pidstat *ps;  ps = (struct pidstat *)xmalloc (sizeof (struct pidstat));  ps->pid = pid;  ps->status = status;  ps->next = (struct pidstat *)0;  return ps;}static struct pidstat *bgp_add (pid, status)     pid_t pid;     int status;{  struct pidstat *ps;  ps = bgp_alloc (pid, status);  if (bgpids.list == 0)    {      bgpids.list = bgpids.end = ps;      bgpids.npid = 0;			/* just to make sure */    }  else    {      bgpids.end->next = ps;      bgpids.end = ps;    }  bgpids.npid++;  if (bgpids.npid > js.c_childmax)    bgp_prune ();  return ps;}static intbgp_delete (pid)     pid_t pid;{  struct pidstat *prev, *p;  for (prev = p = bgpids.list; p; prev = p, p = p->next)    if (p->pid == pid)      {	prev->next = p->next;	/* remove from list */	break;      }  if (p == 0)    return 0;		/* not found */#if defined (DEBUG)  itrace("bgp_delete: deleting %d", pid);#endif  /* Housekeeping in the border cases. */  if (p == bgpids.list)    bgpids.list = bgpids.list->next;  else if (p == bgpids.end)    bgpids.end = prev;  bgpids.npid--;  if (bgpids.npid == 0)    bgpids.list = bgpids.end = 0;  else if (bgpids.npid == 1)    bgpids.end = bgpids.list;		/* just to make sure */  free (p);  return 1;}/* Clear out the list of saved statuses */static voidbgp_clear (){  struct pidstat *ps, *p;  for (ps = bgpids.list; ps; )    {      p = ps;      ps = ps->next;      free (p);    }  bgpids.list = bgpids.end = 0;  bgpids.npid = 0;}/* Search for PID in the list of saved background pids; return its status if   found.  If not found, return -1. */static intbgp_search (pid)     pid_t pid;{  struct pidstat *ps;  for (ps = bgpids.list ; ps; ps = ps->next)    if (ps->pid == pid)      return ps->status;  return -1;}static voidbgp_prune (){  struct pidstat *ps;  while (bgpids.npid > js.c_childmax)    {      ps = bgpids.list;      bgpids.list = bgpids.list->next;      free (ps);      bgpids.npid--;    }}/* Reset the values of js.j_lastj and js.j_firstj after one or both have   been deleted.  The caller should check whether js.j_njobs is 0 before   calling this.  This wraps around, but the rest of the code does not.  At   this point, it should not matter. */static voidreset_job_indices (){  int old;  if (jobs[js.j_firstj] == 0)    {      old = js.j_firstj++;      if (old >= js.j_jobslots)	old = js.j_jobslots - 1;      while (js.j_firstj != old)	{	  if (js.j_firstj >= js.j_jobslots)	    js.j_firstj = 0;	  if (jobs[js.j_firstj] || js.j_firstj == old)	/* needed if old == 0 */	    break;	  js.j_firstj++;	}      if (js.j_firstj == old)        js.j_firstj = js.j_lastj = js.j_njobs = 0;    }  if (jobs[js.j_lastj] == 0)    {      old = js.j_lastj--;      if (old < 0)	old = 0;      while (js.j_lastj != old)	{	  if (js.j_lastj < 0)	    js.j_lastj = js.j_jobslots - 1;	  if (jobs[js.j_lastj] || js.j_lastj == old)	/* needed if old == js.j_jobslots */	    break;	  js.j_lastj--;	}      if (js.j_lastj == old)        js.j_firstj = js.j_lastj = js.j_njobs = 0;    }}      /* Delete all DEAD jobs that the user had received notification about. */static voidcleanup_dead_jobs (){  register int i;  int os;  if (js.j_jobslots == 0 || jobs_list_frozen)    return;  QUEUE_SIGCHLD(os);  /* XXX could use js.j_firstj and js.j_lastj here */  for (i = 0; i < js.j_jobslots; i++)    {#if defined (DEBUG)      if (i < js.j_firstj && jobs[i])	itrace("cleanup_dead_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);      if (i > js.j_lastj && jobs[i])	itrace("cleanup_dead_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);#endif      if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i))	delete_job (i, 0);    }#if defined (COPROCESS_SUPPORT)  coproc_reap ();#endif  UNQUEUE_SIGCHLD(os);}static intprocesses_in_job (job)     int job;{  int nproc;  register PROCESS *p;  nproc = 0;  p = jobs[job]->pipe;  do    {      p = p->next;      nproc++;    }  while (p != jobs[job]->pipe);  return nproc;}static voiddelete_old_job (pid)     pid_t pid;{  PROCESS *p;  int job;  job = find_job (pid, 0, &p);  if (job != NO_JOB)    {#ifdef DEBUG      itrace ("delete_old_job: found pid %d in job %d with state %d", pid, job, jobs[job]->state);#endif      if (JOBSTATE (job) == JDEAD)	delete_job (job, DEL_NOBGPID);      else	{	  internal_warning (_("forked pid %d appears in running job %d"), pid, job);	  if (p)	    p->pid = 0;	}    }}/* Reallocate and compress the jobs list.  This returns with a jobs array   whose size is a multiple of JOB_SLOTS and can hold the current number of   jobs.  Heuristics are used to minimize the number of new reallocs. */static voidrealloc_jobs_list (){  sigset_t set, oset;  int nsize, i, j, ncur, nprev;  JOB **nlist;  ncur = nprev = NO_JOB;  nsize = ((js.j_njobs + JOB_SLOTS - 1) / JOB_SLOTS);  nsize *= JOB_SLOTS;  i = js.j_njobs % JOB_SLOTS;  if (i == 0 || i > (JOB_SLOTS >> 1))    nsize += JOB_SLOTS;  BLOCK_CHILD (set, oset);  nlist = (js.j_jobslots == nsize) ? jobs : (JOB **) xmalloc (nsize * sizeof (JOB *));  js.c_reaped = js.j_ndead = 0;  for (i = j = 0; i < js.j_jobslots; i++)    if (jobs[i])      {	if (i == js.j_current)	  ncur = j;	if (i == js.j_previous)	  nprev = j;	nlist[j++] = jobs[i];	if (jobs[i]->state == JDEAD)	  {	    js.j_ndead++;	    js.c_reaped += processes_in_job (i);	  }      }#if defined (DEBUG)  itrace ("realloc_jobs_list: resize jobs list from %d to %d", js.j_jobslots, nsize);  itrace ("realloc_jobs_list: j_lastj changed from %d to %d", js.j_lastj, (j > 0) ? j - 1 : 0);  itrace ("realloc_jobs_list: j_njobs changed from %d to %d", js.j_njobs, j);  itrace ("realloc_jobs_list: js.j_ndead %d js.c_reaped %d", js.j_ndead, js.c_reaped);#endif  js.j_firstj = 0;  js.j_lastj = (j > 0) ? j - 1 : 0;  js.j_njobs = j;  js.j_jobslots = nsize;  /* Zero out remaining slots in new jobs list */  for ( ; j < nsize; j++)    nlist[j] = (JOB *)NULL;  if (jobs != nlist)    {      free (jobs);      jobs = nlist;    }  if (ncur != NO_JOB)    js.j_current = ncur;  if (nprev != NO_JOB)    js.j_previous = nprev;  /* Need to reset these */  if (js.j_current == NO_JOB || js.j_previous == NO_JOB || js.j_current > js.j_lastj || js.j_previous > js.j_lastj)    reset_current ();#ifdef DEBUG  itrace ("realloc_jobs_list: reset js.j_current (%d) and js.j_previous (%d)", js.j_current, js.j_previous);#endif  UNBLOCK_CHILD (oset);}/* Compact the jobs list by removing dead jobs.  Assumed that we have filled   the jobs array to some predefined maximum.  Called when the shell is not   the foreground process (subshell_environment != 0).  Returns the first   available slot in the compacted list.  If that value is js.j_jobslots, then   the list needs to be reallocated.  The jobs array may be in new memory if   this returns > 0 and < js.j_jobslots.  FLAGS is reserved for future use. */static intcompact_jobs_list (flags)     int flags;{  if (js.j_jobslots == 0 || jobs_list_frozen)    return js.j_jobslots;  reap_dead_jobs ();  realloc_jobs_list ();#ifdef DEBUG  itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0);#endif  return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0);}/* Delete the job at INDEX from the job list.  Must be called   with SIGCHLD blocked. */voiddelete_job (job_index, dflags)     int job_index, dflags;{  register JOB *temp;  PROCESS *proc;  int ndel;  if (js.j_jobslots == 0 || jobs_list_frozen)    return;  if ((dflags & DEL_WARNSTOPPED) && subshell_environment == 0 && STOPPED (job_index))    internal_warning (_("deleting stopped job %d with process group %ld"), job_index+1, (long)jobs[job_index]->pgrp);  temp = jobs[job_index];  if (temp == 0)    return;  if ((dflags & DEL_NOBGPID) == 0)    {      proc = find_last_proc (job_index, 0);      /* Could do this just for J_ASYNC jobs, but we save all. */      if (proc)	bgp_add (proc->pid, process_exit_status (proc->status));    }  jobs[job_index] = (JOB *)NULL;  if (temp == js.j_lastmade)    js.j_lastmade = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线观看免费一区| 亚洲综合清纯丝袜自拍| 美女性感视频久久| 精品国产一二三| 黄一区二区三区| 中文字幕av资源一区| 粉嫩av亚洲一区二区图片| 国产精品乱人伦中文| 色综合久久久久综合体| 亚洲成人在线网站| 精品久久人人做人人爰| 国产精品亚洲午夜一区二区三区| 欧美国产精品劲爆| 一本到高清视频免费精品| 视频一区在线视频| 亚洲精品一区二区三区精华液| 国产黄色精品网站| 一区二区三区.www| 日韩欧美在线123| 丰满亚洲少妇av| 一区二区三区成人在线视频| 日韩欧美一级二级三级| 成人午夜短视频| 亚洲成人www| 中文字幕成人av| 欧美高清激情brazzers| 国产精品2024| 亚洲国产中文字幕在线视频综合| 欧美成人性战久久| 91福利精品第一导航| 日韩高清在线观看| 国产精品成人在线观看| 欧美高清性hdvideosex| 成人午夜伦理影院| 美女视频免费一区| 亚洲综合久久久| 中文字幕不卡三区| 欧美变态tickling挠脚心| 91在线免费播放| 国产乱国产乱300精品| 亚洲午夜精品17c| 中文字幕乱码日本亚洲一区二区| 欧美精品777| 色88888久久久久久影院按摩| 国产在线精品一区二区夜色 | 波多野结衣视频一区| 日本成人中文字幕在线视频| 日韩久久一区二区| 国产视频一区二区在线观看| 91精品在线观看入口| 91麻豆国产精品久久| 国产成人在线免费| 狠狠狠色丁香婷婷综合激情| 香蕉成人啪国产精品视频综合网| 一色桃子久久精品亚洲| 国产婷婷色一区二区三区在线| 91精品午夜视频| 欧美色涩在线第一页| 一本久久a久久精品亚洲| 成人激情动漫在线观看| 国产乱码精品一区二区三区忘忧草 | 国产精品久久久久久亚洲伦| 欧美成人猛片aaaaaaa| 欧美日韩午夜影院| 精品婷婷伊人一区三区三| 精品久久一区二区| 欧美一级在线观看| 欧美午夜精品一区二区三区| 91丨九色丨蝌蚪丨老版| 91在线视频18| 色综合av在线| 欧美专区亚洲专区| 欧美性色aⅴ视频一区日韩精品| av一区二区久久| 99久久er热在这里只有精品15| 国产.欧美.日韩| 国产.欧美.日韩| 99久久精品国产麻豆演员表| 成人动漫av在线| 91麻豆产精品久久久久久| 色欲综合视频天天天| 欧洲av一区二区嗯嗯嗯啊| 欧美影片第一页| 欧美日韩另类一区| 欧美精品黑人性xxxx| 欧美videofree性高清杂交| 欧美一区二区三区啪啪| 欧美一区二区三区日韩视频| 精品日韩欧美在线| 精品福利一二区| 中文字幕av资源一区| 日本欧美一区二区| 国产高清不卡一区| 岛国av在线一区| 久久美女高清视频| 亚洲第一综合色| 成人性生交大片免费看在线播放| 国产成人高清在线| 日韩精品视频网| 亚洲成va人在线观看| 国产成人在线色| 欧美一区二区三区影视| 国产人伦精品一区二区| 国产精品对白交换视频| 香蕉久久一区二区不卡无毒影院| 亚洲三级在线免费观看| 九九久久精品视频| 国产ts人妖一区二区| 欧美视频三区在线播放| 91麻豆精东视频| 国产成人av福利| 一区二区三区日韩精品| 一本色道久久综合亚洲精品按摩| 精品视频999| 亚洲成av人片一区二区梦乃 | 久久亚洲影视婷婷| 亚洲欧美综合色| 五月婷婷欧美视频| 欧美v日韩v国产v| 91久久精品一区二区| 26uuuu精品一区二区| 一本色道久久加勒比精品| 亚洲欧洲成人自拍| 99久久精品费精品国产一区二区| 色综合久久88色综合天天| 中文字幕在线不卡| 成人精品国产福利| 国产精品黄色在线观看| 丁香网亚洲国际| 51午夜精品国产| 亚洲国产日韩av| 久久精品视频网| 欧美伊人久久久久久午夜久久久久| 午夜伊人狠狠久久| 亚洲一区二区三区中文字幕在线| 日韩中文字幕91| 欧美日韩不卡在线| 91麻豆自制传媒国产之光| 欧美一级久久久久久久大片| 欧美日韩午夜影院| 国产乱码精品一区二区三| 国产成人精品免费看| 日韩视频免费观看高清完整版| 亚洲伊人色欲综合网| 中国av一区二区三区| 久久久久久久久岛国免费| 日本一区二区三区四区在线视频| 亚洲福利一二三区| 精品影视av免费| 91国产丝袜在线播放| 欧美无砖专区一中文字| 国产精品 欧美精品| 日韩电影在线观看电影| 午夜精品一区二区三区三上悠亚| 91精品国产欧美一区二区18| 韩日精品视频一区| 在线观看不卡一区| 国产真实乱偷精品视频免| 国产日韩欧美a| 中文av一区特黄| 欧美一区二区三区系列电影| 精品播放一区二区| 天天影视色香欲综合网老头| 成人av网址在线| 日韩伦理电影网| 国产精品一区2区| 国内精品伊人久久久久av影院| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产欧美一区二区三区网站| 亚洲国产精品久久人人爱 | 亚洲免费视频中文字幕| 国产精品亚洲人在线观看| 成人黄色小视频| 久久久久久亚洲综合影院红桃| 国产精品视频yy9299一区| 国产.欧美.日韩| 欧美色中文字幕| 日韩一卡二卡三卡国产欧美| 亚洲成a人片在线观看中文| 久久久久久**毛片大全| 国产精品网站在线观看| 91精品在线麻豆| 夜夜爽夜夜爽精品视频| 欧美精品乱码久久久久久按摩| 亚洲电影一级黄| 884aa四虎影成人精品一区| 中文字幕一区二区三区在线观看 | 国产欧美va欧美不卡在线| 欧美福利一区二区| 日韩一卡二卡三卡四卡| 国产欧美日韩综合| 日韩一区二区高清| 国产欧美一区二区三区鸳鸯浴 | 久久综合久久综合久久| 国产成人福利片| 国产精品久久国产精麻豆99网站| 亚洲欧美日韩在线| 欧美中文字幕久久| 日韩欧美国产一区二区三区| 欧美一区二区不卡视频|