Sponsored Content
Top Forums Shell Programming and Scripting Question using signals in my own shell.. Post 302255036 by blind melon on Wednesday 5th of November 2008 08:03:43 PM
Old 11-05-2008
Question using signals in my own shell..

Wasn't really sure where to put this, since I'm using C in UNIX, but I am making my own shell... so, what's going on is this:

For our program, we had to create our own shell, and if the user pressed ctrl-c just at the cmdline, then this signal would be ignored, but if there is a foreground process running, let's say, "sleep 10", and ctrl-c was pressed, then this process would be terminated... however, my problem lies within background processes... when I press ctrl-c after running something like "sleep 10 &", where the '&' indicates it's a background process, it uses the correct if branch of my SIGINT_handler, but it terminates the process.... so it's definitely something wrong with either the handler, or the installation of the signal.

What I don't get is... if the ctrl-c at the command line doesn't quit the program, why would it terminate my background process? Is it because the parent process just puts the ctrl-c onto the child processes? If so, is there a way to add something to my SIGINT_handler to make it ignore this signal?

****Let me just say that I have successfully been able to ignore the signal for a background process, but this way doesn't use my SIGINT_handler, which I do want it to use so some text gets printed. The way I'm talking of is just using "signal(SIGINT, SIG_IGN)", but like I said, doesn't use my SIGINT_handler...


This is my SIGINT_handler:

void SIGINT_handler(int sig)
{
if (foreground_pid == 0)
{
fprintf(stderr, "\nSIGINT ignored\n");
}
else
{
kill(foreground_pid, SIGINT);
foreground_pid = 0;
}
}


And then when I install the handler/signal, I use signal(SIGINT, SIGINT_handler) and also set foreground_pid in its respective spot... so if anyone can help, that'd be awesome, and if you need to see more code or some things are unclear, ask. Thanks.
 

10 More Discussions You Might Find Interesting

1. Programming

Signals In HP-UX

does the way of handling, interrupting signals in HP-UX same as that of solaris. If there is difference than what it is.?:confused: (1 Reply)
Discussion started by: kapilv
1 Replies

2. Programming

Unix/Linux Newbie(ish) Question - IPC/Signals

:) Hello, i have been given the following code to help me learn how to use signals, it won't compile. The problem maybe because this was written for use in Unix and i am trying to compile in Linux. The error i get says that SIGPIPE and SIG_IGN are undeclared. I think that these are defined... (2 Replies)
Discussion started by: theultimatechuf
2 Replies

3. UNIX for Advanced & Expert Users

Signals in Shell

Using Korn Shell on HP-UX 11.x Question about signals between two shells. First shell is the parent that kicks off the second shell. The first shell is going to ignore a standard set of signals, but I want the second shell to signal back to its parent if event X happens. Can I do something of... (5 Replies)
Discussion started by: google
5 Replies

4. Programming

signals related question

Hi all, Just a little question relative to signals. I know that if an application is in the sleep state, When a signal is catched, it will be processed by the handler. But what happens if it's processing something? Does the processing stops?? The following code should illustrate this case ... (2 Replies)
Discussion started by: ninjanesto
2 Replies

5. UNIX for Dummies Questions & Answers

Linux Shell Question: how to print the shell script name ?

Suppose I have a script named "sc.sh" in the script how to print out its name "sc.sh"? (3 Replies)
Discussion started by: meili100
3 Replies

6. UNIX for Dummies Questions & Answers

Signals...

(posted this in the scripting forum as well, but figured it should go here) So, what's going on is this: For our program, we had to create our own shell, and if the user pressed ctrl-c just at the cmdline, then this signal would be ignored, but if there is a foreground process running, let's... (0 Replies)
Discussion started by: blind melon
0 Replies

7. Programming

Using Signals

How can use signals in a C program If i want a child program to signal it's parent program that it(child) program has completed the task that it was assigned.:confused: (2 Replies)
Discussion started by: kapilv
2 Replies

8. Shell Programming and Scripting

how trap the signals in shell scripting

Hi all, I have the c program that c program has to be in sleep mode. I want write a script the it should trap the signal from the c program. The signals are sighup,sigkill,sigterm,sigchld and then it has to go to sleep. If signal is sigchld it has to do to some function. My question is how to... (3 Replies)
Discussion started by: bhas85
3 Replies

9. Shell Programming and Scripting

A question about signals in Unix

Whats a signal 0. An exhaustive search on signals landed me nowhere. Is it possible to do something like this trap "echo $var" 0. If so what signal does this trap catch ? (2 Replies)
Discussion started by: kinny
2 Replies

10. UNIX for Advanced & Expert Users

Help with Signals

Hi All, The problem statement is as below: Problem: A process (exe) is getting executed in background. The output of this process is getting logged in a file. After successfully running for some time the process gets terminated. In the log file following is present: ^M[7m Interrupt ^M[27m... (8 Replies)
Discussion started by: Praty.27
8 Replies
kill(2) 							System Calls Manual							   kill(2)

Name
       kill - send signal to a process

Syntax
       #include <sys/types.h>
       #include <signal.h>

       kill(pid, sig)
       pid_t pid;
       int sig;

Description
       The  system  call sends the signal sig to a process specified by the process number pid.  The sig can be a signal specified in a call or it
       can be 0.  If the sig is 0, error checking is performed, but a signal is not sent.  This call can be used to check the validity of pid.

       The sending and receiving processes must have the same effective user ID, otherwise this call is  restricted  to  the  superuser  with  the
       exception of the signal SIGCONT.  The signal SIGCONT can always be sent to a child or grandchild of the current process.

       If the process number is 0, the signal is sent to all other processes in the sender's process group.

       If  the process number is negative but not -1, the signal is sent to all processes whose process-group-id is equal to the absolute value of
       the process number.

       The above two options are variants of

       If the process number is -1, and the user is the superuser, the signal is broadcast for all processes except to system  processes  and  the
       process sending the signal.

       Processes may send signals to themselves.

Environment
       System Five
       POSIX

       When  your  program  is	compiled in the System V or POSIX environment, a signal is sent if either the real or effective uid of the sending
       process matches the real or saved-set-uid (as described in ) of the receiving process. In addition, any process can use a pid  of  -1,  and
       the signal is sent to all processes subject to these permission checks.

       In POSIX mode, the pid argument is of type pid_t.

Return Values
       Upon successful completion, a value of 0 is returned.  Otherwise, a value of -1 is returned, and is set to indicate the error.

Diagnostics
       The system call fails under the following conditions:

       [EINVAL]       The sig is not a valid signal number.

       [EPERM]	      The  sending  process  is not the superuser, and its effective user ID does not match the effective user ID of the receiving
		      process.

       [ESRCH]	      No process can be found corresponding to that specified by pid.

See Also
       execve(2), getpgrp(2), getpid(2), killpg(2), sigvec(2), pause(3)

																	   kill(2)
All times are GMT -4. The time now is 06:35 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy