#include "stdio.h"
#include "unistd.h"
int main(int argc, char const *argv[])
{
char buf[10]="xxxxxxxxx";
write(STDOUT_FILENO,buf, 5);
return 0;
}
gcc out.c -o out
(要先执行命令 stty tostop ,禁止后台作业输出至控制终端)
./out & 或者 nohup ./out &
用strace查看
write(2, "nohup: ", 7) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTOU {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=0, ptr=0x100000000}} ---
--- stopped by SIGTTOU ---
write(2, "nohup: ", 7) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTOU {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=0, ptr=0x100000000}} ---
--- stopped by SIGTTOU ---
write(2, "nohup: ", 7) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTOU {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=0, ptr=0x100000000}} ---
--- stopped by SIGTTOU ---
#include "stdio.h"
#include "unistd.h"
int main(int argc, char const *argv[])
{
char buf[10]={0};
read(STDIN_FILENO,buf, 5);
write(STDOUT_FILENO,buf, 5);
return 0;
}
./in & 或者 nohup ./in &
用strace查看
read(0, 0x7ffded8eae70, 5) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTIN {si_signo=SIGTTIN, si_code=SI_KERNEL, si_value={int=0, ptr=0x100000000}} ---
--- stopped by SIGTTIN ---
read(0, 0x7ffded8eae70, 5) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTIN {si_signo=SIGTTIN, si_code=SI_KERNEL, si_value={int=0, ptr=0x100000000}} ---
--- stopped by SIGTTIN ---
read(0, 0x7ffded8eae70, 5) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTIN {si_signo=SIGTTIN, si_code=SI_KERNEL, si_value={int=0, ptr=0x100000000}} ---
--- stopped by SIGTTIN ---
(shell将作业转为前台进程组时,会将继续信号SIGCONT,送给该作业)