Can I provide/pass any arguments to signal handler?
/* Signal handling */ struct sigaction act; act.sa_handler = signal_handler; /* some more settings */
Absolutely. You can pass integers and pointers to signal handlers by using sigqueue() instead of the usual kill().
http://man7.org/linux/man-pages/man2/sigqueue.2.html