24

I'm trying to understand OS concepts and Python libraries.

I came across a specific example mentioned in Python documentation https://docs.python.org/3/library/signal.html link which is not working for me on Windows.

import signal, os def handler(signum, frame): print('Signal handler called with signal', signum) raise OSError("Couldn't open device!") # Set the signal handler and a 5-second alarm signal.signal(signal.SIGALRM, handler) signal.alarm(5) # This open() may hang indefinitely fd = os.open('/dev/ttyS0', os.O_RDWR) signal.alarm(0) # Disable the alarm 

Is there any specific reason why singal.SIGALRM is not working on windows?

Auto complete is even showing the SIGALRM in Pycharm IDE (I'm assuming that there will be a variable or function if it shows like that).

But when I run the program, it is giving me the below error on Windows. I haven't checked this on Linux.

Traceback (most recent call last): File "C:/Users/preddy53/Desktop/syst.py", line 8, in <module> signal.signal(signal.SIGALRM, handler) AttributeError: module 'signal' has no attribute 'SIGALRM' 

Where am I doing wrong? Is it specific to operating system only?

2
  • 2
    Because Windows doesn't have such a signal. Commented Oct 12, 2018 at 12:53
  • As it will not have /dev/ttyS0. Commented Oct 12, 2018 at 12:55

1 Answer 1

35

Is there any specific reason why singal.SIGALRM is not working on windows?

Yes, Windows OS doesn't implement that signal. The example you found starts with:

Here is a minimal example program. It uses the alarm() function to limit the time spent waiting to open a file; [...]

and the signal.alarm() function is documented as:

Availability: Unix.

Next, the SIG* section elsewhere on the module documentation page states:

Note that not all systems define the same set of signal names; only those names defined by the system are defined by this module.

So SIGALRM is not available on Windows so you get an attribute error instead.

Note that Windows also does not have a /dev virtual filesystem, so the os.open('/dev/ttyS0', os.O_RDWR) call would fail too.

See python: windows equivalent of SIGALRM for an alternative using threads.

Sign up to request clarification or add additional context in comments.

2 Comments

ok. So, is there alternative for SIGALRM which could do more or less the same thing in Windows?
@Anudeep: I already linked to a post that talks about an alternative.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.