Translate

Signals in C Language क्या हैं? (C में सिग्नल की पूरी जानकारी)

कल्पना कीजिए कि आप एक busy server चला रहे हैं और अचानक एक critical error आता है। Program abruptly crash होने के बजाय OS एक warning भेजता है। ये notification है जिसे हम Signal in C language कहते हैं। इस तरह से Signals हमारे programs को safe और intelligent बनाते हैं।

सरल शब्दों में, Signals in C language ऐसे asynchronous events होते हैं जो program को बताते हैं कि कोई विशेष घटना घट चुकी है।

C Language में Signals क्या हैं? | Signals in C Language Complete Guide

इस लेख में हम विस्तार से समझेंगे:

  • C में Signals क्या होते हैं
  • Signal Handling in C कैसे काम करता है
  • signal() function, raise(), kill() का उपयोग
  • Default signal handler behaviors और extended signals
  • OS-level signal management (pending, masking, stack)
  • Common Signals के उदाहरण
  • Practical programming examples
  • Real-world use cases
  • FAQs और actionable insights

📚 Table of Contents

C Language में Signals क्या हैं?

Signals Operating System द्वारा भेजे गए notifications होते हैं जो program को बताते हैं कि कोई विशेष घटना हुई है। ये asynchronous होते हैं और program flow को अचानक interrupt कर सकते हैं।

उदाहरण:

  • Keyboard interrupt
  • Invalid memory access
  • Program termination request
  • Arithmetic error

Program signal receive होने पर तीन तरीके से react कर सकता है:

  1. Default action execute करना
  2. Signal को ignore करना
  3. Custom Signal Handler लिखना

इसी process को Signal Handling in C कहा जाता है। Signals programs को crash होने से बचाने और system resources manage करने में मदद करते हैं।

Signals कैसे काम करते हैं?

Program run होते समय Operating System continuously events monitor करता है। जब कोई event trigger होता है — जैसे Ctrl + C — OS program को SIGINT signal भेज देता है।

Program signal receive होने पर:

  • Default behavior execute करता है
  • या custom signal handler call करता है

Signals Working Flow

  1. Event trigger होता है
  2. Operating System signal generate करता है
  3. Signal program तक पहुँचता है
  4. Signal handler execute होता है

Signals asynchronous होने के कारण कभी-कभी program flow को interrupt कर सकते हैं। इसलिए correct signal handling crucial है।

signal() Function in C

C language में signal handling के लिए signal() function का उपयोग किया जाता है। यह specific signal के लिए handler assign करता है।

Syntax

void (*signal(int sig, void (*func)(int)))(int);

Example

#include <stdio.h>
#include <signal.h>

void handler(int sig) {
    printf("Interrupt signal received: %d\n", sig);
}

int main() {
    signal(SIGINT, handler);

    while(1) {
        printf("Program running...\n");
    }

    return 0;
}

जब user Ctrl + C दबाएगा, program terminate होने के बजाय handler() execute होगा।

raise() और kill() Functions

C में आप signals खुद generate कर सकते हैं:

  • raise(signal_type): Current process को signal भेजता है।
  • kill(pid, signal_type): किसी अन्य process को signal भेजता है।

Example:

#include <signal.h>
#include <stdio.h>

void handler(int sig) {
    printf("Signal %d received\n", sig);
}

int main() {
    signal(SIGINT, handler);
    raise(SIGINT);  // Self signal
    return 0;
}

ये functions real-world process control और debugging में महत्वपूर्ण हैं।

Default Signal Handlers

हर signal का default behaviour OS define करता है। Categories include:

  • Ignore: Signal ignore होता है।
  • Terminate: Process terminate हो जाता है।
  • Stop: Process pause हो जाता है।
  • Continue: Stop हुए process resume होते हैं।

Custom handler assign करके default behavior override किया जा सकता है।

Common और Extended Signals

Signal Meaning
SIGINT Keyboard interrupt (Ctrl + C)
SIGTERM Program termination signal
SIGABRT Abort signal
SIGFPE Floating point error
SIGSEGV Invalid memory access
SIGQUIT Quit signal (core dump)
SIGCHLD Child process terminated
SIGCONT Continue stopped process
SIGTSTP Terminal stop (Ctrl + Z)

ये सभी signals C language signals programming में महत्वपूर्ण होते हैं।

OS-Level Signal Management

Operating System internally signals को manage करने के लिए:

  • 🔹 Pending Signals List: सभी received signals queue में store होते हैं।
  • 🔹 Signal Masking: कुछ signals को temporarily block किया जा सकता है।
  • 🔹 Signal Stack: OS original process context save करके handler run करता है।

Advanced applications और servers में signal masking और pending signals handle करना जरूरी है।

Practical Signal Handling Examples in C

नीचे हम advanced examples देखेंगे जिसमें program controlled termination, multiple signals handling, और safe shutdown illustrate किया गया है।

Example 1: Custom Handler for SIGTERM

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>

void handler(int sig){
    printf("Signal %d received, cleaning up...\n", sig);
    exit(1);
}

int main(){
    signal(SIGTERM, handler);

    while(1){
        printf("Server running...\n");
    }
    return 0;
}

यह example बताता है कि server process को gracefully shutdown कैसे किया जाता है।

Example 2: Handling Multiple Signals

#include <stdio.h>
#include <signal.h>

void sigintHandler(int sig){ printf("SIGINT received\n"); }
void sigtstpHandler(int sig){ printf("SIGTSTP received\n"); }

int main(){
    signal(SIGINT, sigintHandler);
    signal(SIGTSTP, sigtstpHandler);

    while(1){ /* Program running */ }
    return 0;
}

Multiple signals को separate handlers के साथ manage करके program flexibility बढ़ाई जा सकती है।

Real-World Use Cases of Signals in C

  • Process Control: Server applications signals का use करके processes stop या restart करते हैं।
  • Error Handling: Memory errors या arithmetic errors detect करने के लिए signals handle किए जाते हैं।
  • System Programming: OS-level programming में signals critical होते हैं।
  • Graceful Shutdown: Servers को safely shutdown करने के लिए SIGTERM या SIGHUP handle किया जाता है।
  • Web Servers: NGINX जैसे servers configuration reload के लिए SIGHUP use करते हैं: kill -HUP <pid>

Quick Tips:

  1. Critical signals identify करें (SIGINT, SIGTERM आदि)
  2. Custom handlers write करें using signal() or sigaction()
  3. Handlers reentrant-safe होने चाहिए
  4. Signal events log करें debugging और monitoring के लिए
  5. Testing के लिए raise() और kill() functions का प्रयोग करें

Frequently Asked Questions (FAQ)

1. C language में Signal क्या होता है?

Signal एक notification है जो Operating System program को भेजता है जब कोई event होता है।

2. Signal handling in C क्या है?

जब program किसी signal को receive करके specific action करता है तो उसे signal handling कहा जाता है।

3. signal() function का उपयोग क्यों किया जाता है?

signal() function program को specific signal के लिए handler assign करने की सुविधा देता है।

4. SIGINT क्या है?

SIGINT एक interrupt signal है जो आमतौर पर Ctrl + C दबाने पर generate होता है।

5. Signals in C language का उपयोग कहाँ होता है?

System programming, process control, server management और error handling में।

6. SIGTERM और SIGINT में क्या अंतर है?

SIGINT typically keyboard interrupt से आता है, जबकि SIGTERM process termination के लिए OS द्वारा भेजा जाता है।

7. raise() और kill() function का use कैसे होता है?

raise() self process को signal भेजता है, kill() किसी specific process ID को signal भेजता है।

📌 Further reading

Post a Comment

Blogger

Your Comment Will be Show after Approval , Thanks

Support Our Content

Pay via UPI
Works with: GPay | PhonePe | Paytm | BHIM
anurajk.com@ptyes


More Payment Options / Scan QR →

Ads

 
↑ Top