It's not going to rewind your code back to the beginning of that line when the interrupt returns. It'll jump back into where the segfault happened, deep inside libc, which already has a copy of the variable that won't change when you change j. So, that's not going to work.
There's also a problem with calling library calls inside a signal handler. What if, for instance, a SIGSEGV happened right inside malloc(), causing a second malloc() to be called before the first one has finished? The heap may not even be in a valid state at that moment, or may be left in an invalid state when the second one returns. Nothing but system calls are signal-safe unless specifically written to avoid signal interference, and even then, not all system calls.
I also forsee another problem with this design of yours. The signal has no way to know what size buffer is needed. Why not just do this instead?
This creates a correct-sized buffer containing "hello\n" for you. You can free it with free() later.
HI,
I need to handle SIGUSR2 signal in my application to change the state of the application dynamically. I have implemented the signal handler. However the application is able to catch only one SIGUSR2 signal. The second SIGUSR2 signal causes the application to crash. This is happning only with... (3 Replies)
Hi folks
I'm trying to write a signal handler (in c on HPUX) that will catch the child process launched by execl when it's finished so that I can check a compliance file.
The signal handler appears to catch the child process terminating however when the signal handler completes the parent... (3 Replies)
Dear all,
I used debugger from C++ and these are the message I got:
Program received signal SIGSEGV, Segmentation fault.
0x00323fc0 in free () from /lib/tls/libc.so.6
(gdb) info s
#0 0x00323fc0 in free () from /lib/tls/libc.so.6
#1 0x00794fa1 in operator delete () from... (5 Replies)
Guys,
I'm doing signal handling in Perl. I'm trying to catch ^C signal inside the script.
There two scripts : one shell script and one perl script.
The shell script calls the perl script.
For e.g. shell script a.sh and perl scipt sig.pl.
Shell script a.sh looks something like this :... (6 Replies)
Hello all,
I am starting to learn signal handling in Linux and have been trying out some simple codes to deal with SIGALRM. The code shown below sets a timer to count down. When the timer is finished a SIGALRM is produced. The handler for the signal just increments a variable called count. This... (7 Replies)
Hi,
I have a main loop which calls a sub loop, which finally returns to the main loop itself. The main loop runs when a flag is set. Now, I have a signal handler for SIGINT, which resets the flag and thus stops the main loop. Suppose I send SIGINT while the program is in subloop, I get an error... (1 Reply)
I am trying to write a small program where I can send signals and then ask for an action to be triggered if that signal is received. For example, here is an example where I am trying to write a programme that will say you pressed ctrl*c when someone presses ctrl+c. My questions are what you would... (1 Reply)
hi friends i have a problem in signal handling ...
let me explain my problem clearly..
i have four process ..
main process forks two child process and each child process again forks another new process respectively...
the problem is whenever i kill the child process it is reforking and the... (2 Replies)
Hello,
One of our customer is getting segmentation fault when he runs his shell script which invokes our executable on AIX 6.1.
On AIX 5.3, there were no issues.
Here is the truss output.
811242: __loadx(0x0A040000, 0xF0D3A26C, 0x00000000, 0x00000009, 0x00000000) = 0xF026E884... (0 Replies)
Discussion started by: erra_krishna
0 Replies
LEARN ABOUT OSF1
siginfo
siginfo(5) File Formats Manual siginfo(5)NAME
siginfo - Details of signal generation
SYNOPSIS
#include <siginfo.h>
DESCRIPTION
The siginfo structure provides processes with information on why a signal was generated, or a process that is monitoring child processes
may receive information that specifies why a child process changed state. See the sigaction(2) and waitid(2) reference pages for more
information.
The type siginfo_t contains the following members: Contains the system generated signal number. Note that for the waitid function, this
field is always SIGCHLD. Contains, if non-zero, the errno that is associated with the signal. Specifies a code that determines whether
the signal was generated by a user process, a specific signal, or by the kernel. When the value of si_code is less than or equal to zero
(0), the signal was generated by a user process and the siginfo structure contains the following additional members:
pid_t si_pid /*sending process ID*/ uid_t si_uid /*sending user ID*/
See the kill(2) and sigsend(2) reference pages for more information on these fields.
The following table describes the meaning of the code generated by a signal. The table lists signals in alphabetical order.
----------------------------------------------------------
Signal Code Definition
----------------------------------------------------------
SIGBUS BUS_ADRALN invalid address alignment
BUS_ADRERR non-existent physical address
BUS_OBJERR object specific hardware error
SIGCHLD CLD_EXITED child has exited
CLD_KILLED child was killed
CLD_DUMPED child terminated abnormally
CLD_TRAPPED traced child has trapped
CLD_STOPPED child has stopped
CLD_CONTINUED stopped child has continued
CLD_SIGEXITING child is about to exit because
it received a fatal signal
SIGILL ILL_ILLOPC illegal opcode
ILL_ILLOPN illegal operand
ILL_ILLADR illegal addressing mode
ILL_ILLTRP illegal trap
ILL_PRVOPC privileged opcode
ILL_PRVREG privileged register
ILL_COPROC coprocessor error
ILL_BADSTK internal stack error
SIGFPE FPE_INTDIV integer divide by zero
FPE_INTOVF integer overflow
FPE_FLTDIV floating point divide by zero
FPE_FLTOVF floating point overflow
FPE_FLTUND floating point underflow
FPE_FLTRES floating point inexact result
FPE_FLTINV invalid floating point opera-
tion
FPE_FLTSUB subscript out of range
SIGPOLL POLL_IN data input available
POLL_OUT output buffers available
POLL_MSG input message available
POLL_ERR I/O error
POLL_PRI high priority input available
POLL_HUP device disconnected
SIGSEGV SEGV_MAPERR address not mapped to object
SEGV_ACCERR invalid permissions for mapped
object
SIGTRAP TRAP_BRKPT process breakpoint
TRAP_TRACE process trace trap
----------------------------------------------------------
When a signal is generated by the system, the meaning of the code is as follows:
------------------------------------------------------------
Signal Field Description
------------------------------------------------------------
SIGILL caddr_t si_addr address of faulting instruction
SIGFPE
SIGSEGV caddr_t si_addr address of faulting memory
SIGBUS reference
SIGCHLD pid_t si_pid child process ID
int si_status exit value or signal
SIGPOLL long si_band band event for POLL_IN,
POLL_OUT, or POLL_MSG
------------------------------------------------------------
Note, if the signal is SIGCHLD, and the si_code is equivalent to CLD_EXITED, si_status is equivalent to the exit value of the
process. If si_code is not equivalent to CLD_EXITED, the si_status field is equivalent to the signal that caused the process to
change state. In some instances, si_addr may not be defined, but si_addr will appear on the same page as the faulting instruction
or memory reference.
SEE ALSO
Functions: kill(2), sigaction(2), sigsend(2), waitid(2)
Files: signal(4)siginfo(5)