code:psignal - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

  • 发送信号sig到指定进程p
  • 共输入两个参数
    • sig : 信号标志
    • p : 指向 指定进程的 proc结构

3958

3959 /*

3960  * Send the specified signal to

3961  * the specified process.

3962  */

3963 psignal(p, sig)

3964 int *p;

3965 {

3966     register *rp;

3967

3968     if(sig >= NSIG)

3969          return;

  • 若 信号标志越界(不检查下界),则函数直接返回
3970     rp = p;

3971     if(rp->p_sig != SIGKIL)

3972          rp->p_sig = sig;

  • 更新 指定进程的 信号
  • 但 SIGKIL 信号不更新
3973     if(rp->p_pri > PUSER)

3974          rp->p_pri = PUSER;

  • LIONS源代码为3973     if(rp->p_stat > PUSER)
3974          rp->p_stat = PUSER; 疑为错误
  • 更新 进程优先数 p_pri = min{p_pri,PUSER}
  • PUSER 定义在 param.h
3975     if(rp->p_stat == SWAIT)

3976          setrun(rp);

  • 若 指定进程 在低优先级睡眠,则唤醒该进程
3977 }

3978 /* ------------------------- */

Ref

Caller

⚠️ **GitHub.com Fallback** ⚠️