Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
360 views
in Technique[技术] by (71.8m points)

c - Bringing a running background process to the foreground in a shell

I am writing a shell in C that does a basic job control. My observations from the bash shell are that when the fg [%]id command is run, it can bring two types of jobs into the foreground.

  1. Stopped jobs (Signaled using Ctrl+Z)
  2. Jobs running in the background

My current implementation of the shell is such that whenever the program starts, the shell running in the foreground is made to ignore all signals. Whenever a child process gets forked, each of the processes that are not background specified (using &), get default signal handlers. The result of this is that the shell ignores all the signals and all other foreground processes intercept the signals correctly. When a foreground job that has been stopped is resumed, the signals still get intercepted and everything works as expected. I have made use of tcsetpgrp() to switch the shell when any foreground process is running and switch it back when the program completes execution.

The way my implementation handles background processes is that when they are forked by the shell, they are made to ignore all signals. Now, when a running background process is brought back to the foreground, it retains it;s signal handlers and thus ignores all the signals passed to it.

Is there any way to change the signal action of that particular process from the parent process i.e. the shell. I read up on sigaction() and kill() system calls, both of which are not useful in this case.
Any help or suggestions please.

question from:https://stackoverflow.com/questions/65926549/bringing-a-running-background-process-to-the-foreground-in-a-shell

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...