linux下ctrl+d是啥意思?

时间:2021-12-29 18:44:52
当系统启动后,我按ctrl+d,然后我起的一些进程死掉了,串口打印dnsmasq也被信号中断,中断的信号是SIGHUP
我查询ctrl+d有退出shell的意思,
ctl+c:发送信号SIGINT(程序中止)
ctl+d:发送信号SIGTSTP(进程中止)
这个CTRL+d 到底是什么意思,是发送信号SIGTSTP或者SIGHUP,还是退出shell?
我不希望CTRL+d 杀死某些进程如何操作

14 个解决方案

#1



对信号函数的从写来实现
setjmp 与 longjmp

#2


刚试了下用ctrl+c只是对当前进程起了中断,不会杀死进程,ctrl+z也不会杀死进程,不是说SIGTSTP是由CTRL+z来产生的吗,怎么会不是?
刚搜索了SIGTSTP,发现被杀死的进程程序中也没有关于SIGTSTP的信号处理啊?这是怎么回事?

#3


SIGTSTP
 This interactive stop signal is generated by the terminal driver when we type the terminal suspend key (often Control-Z). This signal is sent to all processes in the  foreground process group.

Unfortunately, the term stop has different meanings. When discussing job control and signals, we talk about stopping and continuing jobs. The terminal driver, however, has historically used the term stop to refer to stopping and starting the terminal output using the Control-S and Control-Q characters. Therefore, the terminal driver calls the character that generates the interactive stop signal the suspend character, not the stop character.
 

#4


引用楼主 linkejin 的帖子:
当系统启动后,我按ctrl+d,然后我起的一些进程死掉了,串口打印dnsmasq也被信号中断,中断的信号是SIGHUP
我查询ctrl+d有退出shell的意思,
ctl+c:发送信号SIGINT(程序中止)
ctl+d:发送信号SIGTSTP(进程中止)
这个CTRL+d 到底是什么意思,是发送信号SIGTSTP或者SIGHUP,还是退出shell?
我不希望CTRL+d 杀死某些进程如何操作

Ctrl+D 发送EOF(end-of-file)
Ctrl+Z 才是SIGTSTP

#5


引用 2 楼 linkejin 的回复:
刚试了下用ctrl+c只是对当前进程起了中断,不会杀死进程,ctrl+z也不会杀死进程,不是说SIGTSTP是由CTRL+z来产生的吗,怎么会不是? 
刚搜索了SIGTSTP,发现被杀死的进程程序中也没有关于SIGTSTP的信号处理啊?这是怎么回事?

Ctrl+z产生SIGTSTP
ctrl+c产生SIGINT

#6


那为什么我CTRL+d进程死了,CTRL+z进程不死

#7


引用 6 楼 linkejin 的回复:
那为什么我CTRL+d进程死了,CTRL+z进程不死

Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output
Ctrl-l Clear screen
但是控制字符都是可以用(stty命令)更改的。
楼主可以用stty -a看看终端配置。

#8


我使用stty -a CTRL+d是停止输入,怎么会使进程死亡呢,然后重启,但是由于主进程要重启要获得socket
,socket由于老的已经存在,所以报错,没法重启主进程,其他一些主进程维护的进程也没起。
CTRL+d怎么会使进程死亡,一直不得其解啊,貌似EOF也不是一个信号啊,进程也不应该被中断啊

#9


引用 7 楼 mymtom 的回复:
引用 6 楼 linkejin 的回复:
那为什么我CTRL+d进程死了,CTRL+z进程不死 
 
Key Function 
Ctrl-c Kill foreground process 
Ctrl-z Suspend foreground process 
Ctrl-d Terminate input, or exit shell 
Ctrl-s Suspend output 
Ctrl-q Resume output 
Ctrl-o Discard output 
Ctrl-l Clear screen 
但是控制字符都是可以用(stty命令)更改的。 
楼主可以用stty -a看看终端配置。

学习了

#10


SIGHUP 该信号是说明 该进程组从终端脱离,而被杀死.

#11


引用 7 楼 mymtom 的回复:
引用 6 楼 linkejin 的回复:
那为什么我CTRL+d进程死了,CTRL+z进程不死

Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl……

了然,此问题也困惑俺好久了

#12


学习了

#13


学习了~

#14


可是现在我进不去系统。这是怎么回事呢?

#1



对信号函数的从写来实现
setjmp 与 longjmp

#2


刚试了下用ctrl+c只是对当前进程起了中断,不会杀死进程,ctrl+z也不会杀死进程,不是说SIGTSTP是由CTRL+z来产生的吗,怎么会不是?
刚搜索了SIGTSTP,发现被杀死的进程程序中也没有关于SIGTSTP的信号处理啊?这是怎么回事?

#3


SIGTSTP
 This interactive stop signal is generated by the terminal driver when we type the terminal suspend key (often Control-Z). This signal is sent to all processes in the  foreground process group.

Unfortunately, the term stop has different meanings. When discussing job control and signals, we talk about stopping and continuing jobs. The terminal driver, however, has historically used the term stop to refer to stopping and starting the terminal output using the Control-S and Control-Q characters. Therefore, the terminal driver calls the character that generates the interactive stop signal the suspend character, not the stop character.
 

#4


引用楼主 linkejin 的帖子:
当系统启动后,我按ctrl+d,然后我起的一些进程死掉了,串口打印dnsmasq也被信号中断,中断的信号是SIGHUP
我查询ctrl+d有退出shell的意思,
ctl+c:发送信号SIGINT(程序中止)
ctl+d:发送信号SIGTSTP(进程中止)
这个CTRL+d 到底是什么意思,是发送信号SIGTSTP或者SIGHUP,还是退出shell?
我不希望CTRL+d 杀死某些进程如何操作

Ctrl+D 发送EOF(end-of-file)
Ctrl+Z 才是SIGTSTP

#5


引用 2 楼 linkejin 的回复:
刚试了下用ctrl+c只是对当前进程起了中断,不会杀死进程,ctrl+z也不会杀死进程,不是说SIGTSTP是由CTRL+z来产生的吗,怎么会不是? 
刚搜索了SIGTSTP,发现被杀死的进程程序中也没有关于SIGTSTP的信号处理啊?这是怎么回事?

Ctrl+z产生SIGTSTP
ctrl+c产生SIGINT

#6


那为什么我CTRL+d进程死了,CTRL+z进程不死

#7


引用 6 楼 linkejin 的回复:
那为什么我CTRL+d进程死了,CTRL+z进程不死

Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output
Ctrl-l Clear screen
但是控制字符都是可以用(stty命令)更改的。
楼主可以用stty -a看看终端配置。

#8


我使用stty -a CTRL+d是停止输入,怎么会使进程死亡呢,然后重启,但是由于主进程要重启要获得socket
,socket由于老的已经存在,所以报错,没法重启主进程,其他一些主进程维护的进程也没起。
CTRL+d怎么会使进程死亡,一直不得其解啊,貌似EOF也不是一个信号啊,进程也不应该被中断啊

#9


引用 7 楼 mymtom 的回复:
引用 6 楼 linkejin 的回复:
那为什么我CTRL+d进程死了,CTRL+z进程不死 
 
Key Function 
Ctrl-c Kill foreground process 
Ctrl-z Suspend foreground process 
Ctrl-d Terminate input, or exit shell 
Ctrl-s Suspend output 
Ctrl-q Resume output 
Ctrl-o Discard output 
Ctrl-l Clear screen 
但是控制字符都是可以用(stty命令)更改的。 
楼主可以用stty -a看看终端配置。

学习了

#10


SIGHUP 该信号是说明 该进程组从终端脱离,而被杀死.

#11


引用 7 楼 mymtom 的回复:
引用 6 楼 linkejin 的回复:
那为什么我CTRL+d进程死了,CTRL+z进程不死

Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl……

了然,此问题也困惑俺好久了

#12


学习了

#13


学习了~

#14


可是现在我进不去系统。这是怎么回事呢?