Skip to content

wl-copy: ignore SIGINT when backgrounded#220

Open
krobelus wants to merge 1 commit intobugaevc:masterfrom
krobelus:wl-copy-to-ignore-sigint
Open

wl-copy: ignore SIGINT when backgrounded#220
krobelus wants to merge 1 commit intobugaevc:masterfrom
krobelus:wl-copy-to-ignore-sigint

Conversation

@krobelus
Copy link
Copy Markdown

Given a command like

echo foo | wl-copy

Unlike bash, the fish shell puts wl-copy in the shell's process
group 1, which can be observed with "ps -o pid,pgid,comm,args".
On VSCode's integrated terminal, this causes the issue that Control+C
will kill wl-copy, clearing the clipboard. fish has worked around
this2 but still we should fix the command described above.
I'll try to look into changing the fish behavior but chances are
it's complicated.

Let's block SIGINT and SIGQUIT in the background process.
This will make wl-copy behave as if launched as

bash -c "wl-copy &"

because according to Bash documentation3 that's how background
commands in noninteractive shells should behave:

When job control is not in effect, asynchronous commands ignore
SIGINT and SIGQUIT in addition to these inherited handlers.

fish implements this too, but the bug happens on interactive shells.

Given a command like

    echo foo | wl-copy

Unlike bash, the fish shell puts wl-copy in the shell's process
group [1], which can be observed with "ps -o pid,pgid,comm,args".
On VSCode's integrated terminal, this causes the issue that Control+C
will kill wl-copy, clearing the clipboard. fish has worked around
this[2] but still we should fix the command described above.
I'll try to look into changing the fish behavior but chances are
it's complicated.

Let's block SIGINT and SIGQUIT in the background process.
This will make wl-copy behave as if launched as

    bash -c "wl-copy &"

because according to Bash documentation[3] that's how background
commands in noninteractive shells should behave:

> When job control is not in effect, asynchronous commands ignore
> SIGINT and SIGQUIT in addition to these inherited handlers.

fish implements this too, but the bug happens on interactive shells.

[1]: fish-shell/fish-shell@f3736e8
[2]: fish-shell/fish-shell@b3444ea
[3]: https://www.gnu.org/software/bash/manual/html_node/Signals.html
@krobelus
Copy link
Copy Markdown
Author

alternatively we could call setsid in the forked child, and perhaps double-fork additionally (for some added safety)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant