How can I get the a process to listen for user input without terminating? . So, for example, i want the bash to wait for X minutes, and if i say "stop" it quits, or else just keeps waiting... How can I achieve that? So, upon execution my process would wait , and then I want to be able to stop, pause or continue through stdin, typing "stop", "continue" or "pause. Thank you.
Messing with signals, pipes and forks in C
199 views Asked by João Vilaça At
2
There are 2 answers
1
Eugeniu Rosca
On
C piece of code, responsible of reading the user actions (TESTED):
int main()
{
/* start function */
char choice;
while(1)
{
printf("Enter s (stop), c (continue) or p (pause): ");
scanf("%c",&choice);
/* protect against \n and strings */
while(choice != '\n' && getchar() != '\n');
switch(choice) {
case 's' :
printf("Stop!\n" );
/* stop function */
return 0;
break;
case 'c' :
printf("Go on!\n" );
/* resume function */
break;
case 'p' :
printf("Pause!\n" );
/* pause function */
break;
default :
printf("What?\n" );
break;
}
}
return 0;
}
Related Questions in C
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in BASH
- When does Bash read heredocs?
- Why `set -o pipefail` gives different output even though the pipe is not failing
- Run an external command within jq to manipulate each values of a particular key
- API key 401 error in .env.development file
- How to "Enable mobile data" on a Huawei E3372 4G USB dongle using a bash script in Windows
- ImageMagick / Bash : pipe ignored(?) when filename format variable used
- MacOS Bash-Script: while read p and echo
- Parse command line arguments and write useful usage message without additional code
- JQ JSON - Values to Array
- why variable substitution is so different?
- postbank_pdf2csv: how to setup with Cygwin in Windows?
- Custom Bash functions & custom statements - Need some advice
- unexpected operator == in square brackets when trying to use gum lib
- How to disable a bash builtin inside a docker container
- Use sed or rename find series of alphabet then replace with with the same alphabet and a dash -
Related Questions in SHELL
- macOS - Most secure way of a GUI SUDO_ASKPASS
- When does Bash read heredocs?
- Why `set -o pipefail` gives different output even though the pipe is not failing
- Run multiple shell scripts in Dockerfile
- Alias does not take effect when I use Vim to execute external commands
- why variable substitution is so different?
- Error: fish: ${ is not a valid variable in fish
- Custom Bash functions & custom statements - Need some advice
- unexpected operator == in square brackets when trying to use gum lib
- Delete first three lines containing a certain word
- Keep the log for the last 14 days
- Iterate over items in one array and groups of items in second array
- Keep multi-version of a static-lib like what we do for shared-libs
- How to write function in bash for reuse shell commands inside using osascript?
- Why is it that when I pass certain directory names to `ls`, sometimes it does not list their contents?
Related Questions in SIGNALS
- How can I chop up data before sending it into a multiprocessing function?
- Why does registering a handler function for SIGHUP prevent clicking the "X" to close the XTerm window when waiting for input in PHP CLI?
- How to use angular material drag and drop CDK to update value in a service?
- Run cleanup function in Python when Jenkins job is aborted
- How to generate a single key-press event signal with tkinter.bind method
- How can I fit my data better or shift my data? My fit is way below my data
- (Bash, terminal) why do killing script hotkeys don't work (e.g. ctrl-c, ctrl-z)
- In a Linux signal handler, will x86 extended state always be in XSAVE format, or can it be in XSAVEC format as well?
- Passing an Angular signal value from a component input into a service
- How is Unix signal propagated to PGID in namespaces and what is the impact of NSpgid on process signal handling?
- How can I capture a celery.signal for when a task is "queued", must include a way to access kwargs?
- Angular Signals: How to handle requests to API
- SIGCHLD handling in C socket programming
- Angular Behavior: Property Type Changes from SignalFunction to Boolean
- Is it true that the segmentation violation exception can only be triggered once?
Related Questions in FORK
- Forking vs Cloning in GitHub
- Execute JUnit suite with Maven Fork in Customized runOrder
- Multiple child processes accessing the same vector
- Parent process doesn't wait for the child process to terminate
- Implementation Bash pipes and redirections in c
- Why is fork() accepted in strace if the actual syscall is clone()?
- Which child will execute first when you call fork() and wait() multiple times?
- intercommunicating using stdin and stdout between forked C processes
- Ant Junit ForkMode with Suites
- How to enable a PR originating from a forked repo to cause a GitHub workflow to push to a branch (gh-pages) in the original repo?
- Executing sed via execvp makes other pipes blocked
- Python progress bar in conjunction with fork processes
- Race condition in pipe/dup2/exec*
- Git how to pull the update from original repository and keep my own changes
- Using SQLite as object store in a forking web server; can it be done safely?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
A simple (but wasteful) option is that the initial program forks and then wait for input. The child process can update the counter.
When the parent program receive "pause" it sends the signal SIGTSTP to the child.
When the parent program receive "continue" it sends the signal SIGCONT to the child.
When the parent program receive "stop" it sends the signal SIGQUIT to the child.
If you want, you can also set a SIGINT handler in the parent using sigaction that kills the child when you type Ctrl+C.