<p><a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=64743" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benemorius">@benemorius</a></p>
<p>First let me begin by noting that your question is very valid.  The behaviour you described, however it is implemented, should be possible to achieve <em>without an additional thread</em>. The fact that it is not (at least not easily) means that there is something wrong that we need to fix.</p>
<p>To answer to your comment in <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="409342325" data-permission-text="Issue title is private" data-url="https://github.com/RIOT-OS/RIOT/issues/11004" data-hovercard-type="pull_request" data-hovercard-url="/RIOT-OS/RIOT/pull/11004/hovercard" href="https://github.com/RIOT-OS/RIOT/pull/11004">#11004</a> .</p>
<blockquote>
<p>I didn't test this yet but it sounds like you're thinking this should terminate a running process with ^C (that's what <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="396276597" data-permission-text="Issue title is private" data-url="https://github.com/RIOT-OS/RIOT/issues/10715" data-hovercard-type="issue" data-hovercard-url="/RIOT-OS/RIOT/issues/10715/hovercard" href="https://github.com/RIOT-OS/RIOT/issues/10715">#10715</a> is about) which would be lovely too</p>
</blockquote>
<p>There's no "easy" way of doing that. Aside from RIOT specifics, which may make the task harder (or easier) the main obstacle with that is that there are no "processes" in RIOT, only threads. AFAIK this is also true of the other major embedded OSes that target this class of devices. Now, which thread gets killed on CTRL-C? Clearly not the "running" thread (any thread could be running at that instant). In a UNIX terminal, the foreground process is terminated (not really, see next point) but there is no "foreground thread" in RIOT. Finally, tasks should not be <em>killed</em> by ctrl-c, there has to be some graceful termination/cleanup, etc.</p>
<p>The last point is where we have more trouble now, as you well mention in your post. The function/thread that implements the command must wait for at least two different types of events: the one it needs in order to achieve its purpose and the "termination" event. It could also be implemented in the IO layer component that implements the message buffer pseudo-file (an interrupted read could return EINTR).</p>
<p>How are you implementing the message pseudo-file? If it is done with a message queue, it is a matter of sending another message on ctrl-c to the same queue. If it is implemented with a raw circular buffer protected by locks, then the locks could be made <a href="https://www.kernel.org/doc/htmldocs/kernel-locking/API-mutex-lock-interruptible.html" rel="nofollow">interruptible</a>.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/RIOT-OS/RIOT/issues/10715#issuecomment-469268829">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AEn7YOxCMl6w-Jy5BjMQ9O3wjGqWRuSGks5vTSuOgaJpZM4ZyhJ4">mute the thread</a>.<img src="https://github.com/notifications/beacon/AEn7YIWgmVL_j8Gl9UYgAZTwFHprYyKcks5vTSuOgaJpZM4ZyhJ4.gif" height="1" width="1" alt="" /></p>
<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/RIOT-OS/RIOT","title":"RIOT-OS/RIOT","subtitle":"GitHub repository","main_image_url":"https://github.githubassets.com/images/email/message_cards/header.png","avatar_image_url":"https://github.githubassets.com/images/email/message_cards/avatar.png","action":{"name":"Open in GitHub","url":"https://github.com/RIOT-OS/RIOT"}},"updates":{"snippets":[{"icon":"PERSON","message":"@jcarrano in #10715: @benemorius \r\n\r\nFirst let me begin by noting that your question is very valid.  The behaviour you described, however it is implemented, should be possible to achieve _without an additional thread_. The fact that it is not (at least not easily) means that there is something wrong that we need to fix.\r\n\r\nTo answer to your comment in #11004 .\r\n\r\n\u003e  I didn't test this yet but it sounds like you're thinking this should terminate a running process with ^C (that's what #10715 is about) which would be lovely too\r\n\r\nThere's no \"easy\" way of doing that. Aside from RIOT specifics, which may make the task harder (or easier) the main obstacle with that is that there are no \"processes\" in RIOT, only threads. AFAIK this is also true of the other major embedded OSes that target this class of devices. Now, which thread gets killed on CTRL-C? Clearly not the \"running\" thread (any thread could be running at that instant). In a UNIX terminal, the foreground process is terminated (not really, see next point) but there is no \"foreground thread\" in RIOT. Finally, tasks should not be _killed_ by ctrl-c, there has to be some graceful termination/cleanup, etc.\r\n\r\nThe last point is where we have more trouble now, as you well mention in your post. The function/thread that implements the command must wait for at least two different types of events: the one it needs in order to achieve its purpose and the \"termination\" event. It could also be implemented in the IO layer component that implements the message buffer pseudo-file (an interrupted read could return EINTR).\r\n\r\nHow are you implementing the message pseudo-file? If it is done with a message queue, it is a matter of sending another message on ctrl-c to the same queue. If it is implemented with a raw circular buffer protected by locks, then the locks could be made [interruptible](https://www.kernel.org/doc/htmldocs/kernel-locking/API-mutex-lock-interruptible.html)."}],"action":{"name":"View Issue","url":"https://github.com/RIOT-OS/RIOT/issues/10715#issuecomment-469268829"}}}</script>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/RIOT-OS/RIOT/issues/10715#issuecomment-469268829",
"url": "https://github.com/RIOT-OS/RIOT/issues/10715#issuecomment-469268829",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>