Если вы запускаете оболочку в терминале, например, в эмуляторе терминала или в типичном сеансе ssh, в вашей оболочке почти наверняка включено управление заданиями. Это делает получение ответа на ваш вопрос очень простым в большинстве случаев.
Введите, Ctrl+Zчтобы приостановить процесс и затем bg
продолжить его в фоновом режиме, затем введите пустую строку в оболочку, чтобы она проверила, была ли программа остановлена сигналом.
Если процесс пытается прочитать с терминала, он сразу же получит SIGTTIN
сигнал и будет приостановлен. (Когда контроль заданий включен, система позволяет только одному процессу одновременно считывать данные с терминала.) Оболочка сообщит об этом. Затем вы можете набрать, fg
чтобы продолжить процесс на переднем плане, а затем ввести ввод, который будет считан программой в обычном режиме.
mp@ubuntu:~$ sleep 30 # a program that is not reading from the terminal
^Z
[1]+ Stopped sleep 30
mp@ubuntu:~$ bg
[1]+ sleep 30 &
mp@ubuntu:~$
mp@ubuntu:~$
mp@ubuntu:~$ cat - # a program that is reading from the terminal
^Z
[1]+ Stopped cat -
mp@ubuntu:~$ bg
[1]+ cat - &
mp@ubuntu:~$
[1]+ Stopped cat -
mp@ubuntu:~$ jobs -l
[1]+ 3503 Stopped (tty input) cat -
mp@ubuntu:~$ fg
cat -
hi
hi
Некоторые программы, такие как редакторы, будут либо перехватывать, либо игнорировать сигнал, генерируемый Ctrl+Zтерминалом, либо переводить его в режим, в котором управляющие символы даже не генерируют сигналы. Вы должны будете использовать более сложные методы , в этом случае, например, с использованием , strace
чтобы увидеть , если процесс делает read
, select
, poll
и т.д.
PS1
подсказку.