change environment of a running process The 2019 Stack Overflow Developer Survey Results Are InIs it possible to pass environment variables from child to parent in user space?Modify environment variable in a running processexport env variables from file in a makefileUn-mount active partitionWhy can't I print a variable I can see in the output of env?How to change DISPLAY of currently running applicationFile descriptor linked to socket or pipe in procModify environment variable in a running process“ps” output and commentshow to share environment variables between shells like globals related to a master pid?Are environment variables visible to unprivileged users on Linux?how to read any process' /proc/pid/ioWhy does a process of a binary with only execute permission remain hidden in “ps” when using hidepid=2, if the user is not root?How bash changes environmental variables on-the-fly?Why is passing the secrets via environmental variables considered “extremely insecure”?How to persist environment variables in ash, the Almquist shell?

How can I add encounters in the Lost Mine of Phandelver campaign without giving PCs too much XP?

Can a flute soloist sit?

Button changing its text & action. Good or terrible?

Why isn't the circumferential light around the M87 black hole's event horizon symmetric?

Why not take a picture of a closer black hole?

Can we generate random numbers using irrational numbers like π and e?

Loose spokes after only a few rides

Are spiders unable to hurt humans, especially very small spiders?

Why couldn't they take pictures of a closer black hole?

Mathematics of imaging the black hole

How do PCB vias affect signal quality?

Why can't devices on different VLANs, but on the same subnet, communicate?

What is the most efficient way to store a numeric range?

How to support a colleague who finds meetings extremely tiring?

Output the Arecibo Message

"as much details as you can remember"

writing variables above the numbers in tikz picture

What is this sharp, curved notch on my knife for?

How did passengers keep warm on sail ships?

How to translate "being like"?

How much of the clove should I use when using big garlic heads?

A female thief is not sold to make restitution -- so what happens instead?

For what reasons would an animal species NOT cross a *horizontal* land bridge?

Why does the nucleus not repel itself?



change environment of a running process



The 2019 Stack Overflow Developer Survey Results Are InIs it possible to pass environment variables from child to parent in user space?Modify environment variable in a running processexport env variables from file in a makefileUn-mount active partitionWhy can't I print a variable I can see in the output of env?How to change DISPLAY of currently running applicationFile descriptor linked to socket or pipe in procModify environment variable in a running process“ps” output and commentshow to share environment variables between shells like globals related to a master pid?Are environment variables visible to unprivileged users on Linux?how to read any process' /proc/pid/ioWhy does a process of a binary with only execute permission remain hidden in “ps” when using hidepid=2, if the user is not root?How bash changes environmental variables on-the-fly?Why is passing the secrets via environmental variables considered “extremely insecure”?How to persist environment variables in ash, the Almquist shell?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








17















How might it be possible to alter some variable in the env of an already running process, for example through /proc/PID/environ? That "file" is read-only.



Need to change or unset the DISPLAY variable of a long-running batch job without killing it.










share|improve this question



















  • 3





    It's too late now, but for future reference, xpra could be interesting.

    – sr_
    May 9 '12 at 9:56











  • xpra sounds useful. Normally I reroute to non-user displays hosted by Xvfb or Xephyr, but today I forgot and ran from cli rather than cron/at to troubleshoot output, so it's been annoying me at :0

    – Marcos
    May 9 '12 at 11:12


















17















How might it be possible to alter some variable in the env of an already running process, for example through /proc/PID/environ? That "file" is read-only.



Need to change or unset the DISPLAY variable of a long-running batch job without killing it.










share|improve this question



















  • 3





    It's too late now, but for future reference, xpra could be interesting.

    – sr_
    May 9 '12 at 9:56











  • xpra sounds useful. Normally I reroute to non-user displays hosted by Xvfb or Xephyr, but today I forgot and ran from cli rather than cron/at to troubleshoot output, so it's been annoying me at :0

    – Marcos
    May 9 '12 at 11:12














17












17








17


4






How might it be possible to alter some variable in the env of an already running process, for example through /proc/PID/environ? That "file" is read-only.



Need to change or unset the DISPLAY variable of a long-running batch job without killing it.










share|improve this question
















How might it be possible to alter some variable in the env of an already running process, for example through /proc/PID/environ? That "file" is read-only.



Need to change or unset the DISPLAY variable of a long-running batch job without killing it.







environment-variables proc






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 9 '12 at 9:54









Sam

1,34031628




1,34031628










asked May 9 '12 at 9:02









MarcosMarcos

1,14711228




1,14711228







  • 3





    It's too late now, but for future reference, xpra could be interesting.

    – sr_
    May 9 '12 at 9:56











  • xpra sounds useful. Normally I reroute to non-user displays hosted by Xvfb or Xephyr, but today I forgot and ran from cli rather than cron/at to troubleshoot output, so it's been annoying me at :0

    – Marcos
    May 9 '12 at 11:12













  • 3





    It's too late now, but for future reference, xpra could be interesting.

    – sr_
    May 9 '12 at 9:56











  • xpra sounds useful. Normally I reroute to non-user displays hosted by Xvfb or Xephyr, but today I forgot and ran from cli rather than cron/at to troubleshoot output, so it's been annoying me at :0

    – Marcos
    May 9 '12 at 11:12








3




3





It's too late now, but for future reference, xpra could be interesting.

– sr_
May 9 '12 at 9:56





It's too late now, but for future reference, xpra could be interesting.

– sr_
May 9 '12 at 9:56













xpra sounds useful. Normally I reroute to non-user displays hosted by Xvfb or Xephyr, but today I forgot and ran from cli rather than cron/at to troubleshoot output, so it's been annoying me at :0

– Marcos
May 9 '12 at 11:12






xpra sounds useful. Normally I reroute to non-user displays hosted by Xvfb or Xephyr, but today I forgot and ran from cli rather than cron/at to troubleshoot output, so it's been annoying me at :0

– Marcos
May 9 '12 at 11:12











2 Answers
2






active

oldest

votes


















17














You can't do this without a nasty hacks - there's no API for this, no way to notify the process that its environment has changed (since that's not really possible anyway).

Even if you do manage to do that, there is no way to be sure that it will have any effect - the process could very well have cached the environment variable you're trying to poke (since nothing is supposed to be able to change it).



If you really do want to do this, and are prepared to pick up the pieces if things go wrong, you can use a debugger. See for instance this Stack Overflow question:
Is there a way to change another process's environment variables?



Essentially:



(gdb) attach process_id
(gdb) call putenv ("DISPLAY=your.new:value")
(gdb) detach


Other possible functions you could try to call are setenv or unsetenv.



Please do really keep in mind that this may not work, or have dire consequences if the process you target does "interesting" things with its environment block. Do test it out on non-critical processes first, but make sure these test processes mirror as close as possible the one you're trying to poke.






share|improve this answer




















  • 3





    Yes I realize it's somewhat of a hack, risky and not guaranteed for reasons you mentioned. (Part of the reason I visit this group is for such non-conventional needs I can't seem to find ordinarily.) In this case setting DISPLAY to junk or empty merely resolves an annoyance and delay(unnecessary frequent screenshots over network,fine if they fail). Since child copies parent, I need only mod the parent env. Many new child &subchild processes are getting spawned and exit quickly in my batch job; those matter. I figured a debugger could do this, thanks--I could wrap that into a shell function.

    – Marcos
    May 9 '12 at 11:02


















0














There is no need to do so if a batch job can read from a file system to retrieve a change. Just run a job with path to a temporary unique directory and pass the same path to the child shell script. Script will lock a file in that directory and write a file with new values near the lock file. A job script time to time will lock the same file, parse and read changes back from the values file. To find out how to make a lock in the unix shell just search for unix shell lock file or bash lock file, there is already exist a plenty solutions for that.



Benefits from this solution:



  • portable between almost any OS like Windows or Unix

  • no need to write and duplicate complex parsers for each interpreter (unix/windows/etc) to read back values from the file as long as the values file stays simple

Issues in implementation below:



  • Implementation relies on a file lock in a shell redirection phase (flock in Linux to achieve exclusion effect, in Windows has a builtin exclusion)

  • Each value for a variable is a single line value (not a multiline)

Implementation is stored here: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools



The bash implementation:



set_vars_from_locked_file_pair.sh



#!/bin/bash

# Another variant of a configuration file variables read and set script.
# The script must stay as simple as possible, so for this task it uses these parameters:
# 1. path where to lock a lock file
# 2. path where to read a file with variable names (each per line)
# 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

# Script can be ONLY included by "source" command.
if [[ -n "$BASH" && (-z "$BASH_LINENO" || $BASH_LINENO[0] -gt 0) ]]; then

function set_vars_from_locked_file_pair()

# the lock file directory must already exist
if [[ ! -d "$1%[/\]*" ]]; then
echo "$0: error: lock file directory does not exist: `$1%[/\]*`" >&2
return 1
fi

if [[ ! -f "$2//\//" ]]; then
echo "$0: error: variable names file does not exist: `$2`" >&2
return 2
fi

if [[ ! -f "$3//\//" ]]; then
echo "$0: error: variable values file does not exist: `$3`" >&2
return 3
fi

function LocalMain()

# open file for direct reading by the `read` in the same shell process
exec 7< "$2"
exec 8< "$3"

# cleanup on return
trap "rm -f "$1" 2> /dev/null; exec 8>&-; exec 7>&-; trap - RETURN" RETURN

local __VarName
local __VarValue

# shared acquire of the lock file
while :; do
# lock via redirection to file

flock -s 9

# simultaneous iteration over 2 lists in the same time
while read -r -u 7 __VarName; do
read -r -u 8 __VarValue
# drop line returns
__VarName="$__VarName//[$'rn']"
__VarValue="$__VarValue//[$'rn']"
# instead of `declare -gx` because `-g` is introduced only in `bash-4.2-alpha`
export $__VarName="$__VarValue"
(( $4:-0 )) && echo "$__VarName=`$__VarValue`"
done

break

# return with previous code
9> "$1" 2> /dev/null # has exclusive lock been acquired?

# busy wait
sleep 0.02
done


LocalMain "$1//\//" "$2//\//" "$3//\//" "$4:-0"


fi


testlock.sh



#!/bin/bash


flock -x 9 2> /dev/null
read -n1 -r -p "Press any key to continue..."
echo >&2
9> "lock"


The same on Windows (as an example of portability):



set_vars_from_locked_file_pair.bat



@echo off

rem Another variant of a configuration file variables read and set script.
rem The script must stay as simple as possible, so for this task it uses these parameters:
rem 1. path where to lock a lock file
rem 2. path where to read a file with variable names (each per line)
rem 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

rem disable alternative variables expansion to avoid `!` character consumption
setlocal DISABLEDELAYEDEXPANSION

set "FILE_LOCK_PATH=%~1"
set "FILE_VAR_NAMES_PATH=%~2"
set "FILE_VAR_VALUES_PATH=%~3"
set "PRINT_VARS_SET=%~4"

set "FILE_LOCK_DIR=%~d1"

rem the lock file directory must already exist
if not exist "%FILE_LOCK_DIR%" (
echo.%~nx0: error: FILE_LOCK_DIR does not exist: "%FILE_LOCK_DIR%"
exit /b 1
) >&2

if not exist "%FILE_VAR_NAMES_PATH%" (
echo.%~nx0: error: FILE_VAR_NAMES_PATH does not exist: "%FILE_VAR_NAMES_PATH%"
exit /b 2
) >&2

if not exist "%FILE_VAR_VALUES_PATH%" (
echo.%~nx0: error: FILE_VAR_VALUES_PATH does not exist: "%FILE_VAR_VALUES_PATH%"
exit /b 3
) >&2

rem The endlocal works only in the same call context
endlocal

rem exclusive acquire of the lock file
:REPEAT_LOCK_LOOP

(
(
rem if lock is acquired, then we are in...
call :MAIN "%%~2" "%%~3" "%%~4"
call set "LASTERROR=%%ERRORLEVEL%%"

rem exit with return code from the MAIN
) 9> "%~1" && (del /F /Q /A:-D "%~1" & goto EXIT)
) 2>nul

rem Busy wait: with external call significantly reduces CPU consumption while in a waiting state
pathping localhost -n -q 1 -p 20 >nul 2>&1
goto REPEAT_LOCK_LOOP

:EXIT
exit /b %LASTERROR%

:MAIN
rem drop last error
type nul>nul

if %~30 NEQ 0 goto SET_WITH_PRINT

rem trick with simultaneous iteration over 2 lists in the same time
(
for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
set /p "%%i="
)
) < "%~2"

exit /b

:SET_WITH_PRINT
rem trick with simultaneous iteration over 2 lists in the same time
(
for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
set /p "%%i="
rem to filter out wrong matches of a variable from the `set "%%i"`
for /f "usebackq eol=# tokens=1,* delims==" %%j in (`set "%%i"`) do if "%%j" == "%%i" echo.%%i=%%k
)
) < "%~2"


testlock.bat



@echo off

(
pause
) 9> ./lock


To write the files in just make the same way lock in your code.






share|improve this answer

























    Your Answer








    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "106"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f38205%2fchange-environment-of-a-running-process%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    17














    You can't do this without a nasty hacks - there's no API for this, no way to notify the process that its environment has changed (since that's not really possible anyway).

    Even if you do manage to do that, there is no way to be sure that it will have any effect - the process could very well have cached the environment variable you're trying to poke (since nothing is supposed to be able to change it).



    If you really do want to do this, and are prepared to pick up the pieces if things go wrong, you can use a debugger. See for instance this Stack Overflow question:
    Is there a way to change another process's environment variables?



    Essentially:



    (gdb) attach process_id
    (gdb) call putenv ("DISPLAY=your.new:value")
    (gdb) detach


    Other possible functions you could try to call are setenv or unsetenv.



    Please do really keep in mind that this may not work, or have dire consequences if the process you target does "interesting" things with its environment block. Do test it out on non-critical processes first, but make sure these test processes mirror as close as possible the one you're trying to poke.






    share|improve this answer




















    • 3





      Yes I realize it's somewhat of a hack, risky and not guaranteed for reasons you mentioned. (Part of the reason I visit this group is for such non-conventional needs I can't seem to find ordinarily.) In this case setting DISPLAY to junk or empty merely resolves an annoyance and delay(unnecessary frequent screenshots over network,fine if they fail). Since child copies parent, I need only mod the parent env. Many new child &subchild processes are getting spawned and exit quickly in my batch job; those matter. I figured a debugger could do this, thanks--I could wrap that into a shell function.

      – Marcos
      May 9 '12 at 11:02















    17














    You can't do this without a nasty hacks - there's no API for this, no way to notify the process that its environment has changed (since that's not really possible anyway).

    Even if you do manage to do that, there is no way to be sure that it will have any effect - the process could very well have cached the environment variable you're trying to poke (since nothing is supposed to be able to change it).



    If you really do want to do this, and are prepared to pick up the pieces if things go wrong, you can use a debugger. See for instance this Stack Overflow question:
    Is there a way to change another process's environment variables?



    Essentially:



    (gdb) attach process_id
    (gdb) call putenv ("DISPLAY=your.new:value")
    (gdb) detach


    Other possible functions you could try to call are setenv or unsetenv.



    Please do really keep in mind that this may not work, or have dire consequences if the process you target does "interesting" things with its environment block. Do test it out on non-critical processes first, but make sure these test processes mirror as close as possible the one you're trying to poke.






    share|improve this answer




















    • 3





      Yes I realize it's somewhat of a hack, risky and not guaranteed for reasons you mentioned. (Part of the reason I visit this group is for such non-conventional needs I can't seem to find ordinarily.) In this case setting DISPLAY to junk or empty merely resolves an annoyance and delay(unnecessary frequent screenshots over network,fine if they fail). Since child copies parent, I need only mod the parent env. Many new child &subchild processes are getting spawned and exit quickly in my batch job; those matter. I figured a debugger could do this, thanks--I could wrap that into a shell function.

      – Marcos
      May 9 '12 at 11:02













    17












    17








    17







    You can't do this without a nasty hacks - there's no API for this, no way to notify the process that its environment has changed (since that's not really possible anyway).

    Even if you do manage to do that, there is no way to be sure that it will have any effect - the process could very well have cached the environment variable you're trying to poke (since nothing is supposed to be able to change it).



    If you really do want to do this, and are prepared to pick up the pieces if things go wrong, you can use a debugger. See for instance this Stack Overflow question:
    Is there a way to change another process's environment variables?



    Essentially:



    (gdb) attach process_id
    (gdb) call putenv ("DISPLAY=your.new:value")
    (gdb) detach


    Other possible functions you could try to call are setenv or unsetenv.



    Please do really keep in mind that this may not work, or have dire consequences if the process you target does "interesting" things with its environment block. Do test it out on non-critical processes first, but make sure these test processes mirror as close as possible the one you're trying to poke.






    share|improve this answer















    You can't do this without a nasty hacks - there's no API for this, no way to notify the process that its environment has changed (since that's not really possible anyway).

    Even if you do manage to do that, there is no way to be sure that it will have any effect - the process could very well have cached the environment variable you're trying to poke (since nothing is supposed to be able to change it).



    If you really do want to do this, and are prepared to pick up the pieces if things go wrong, you can use a debugger. See for instance this Stack Overflow question:
    Is there a way to change another process's environment variables?



    Essentially:



    (gdb) attach process_id
    (gdb) call putenv ("DISPLAY=your.new:value")
    (gdb) detach


    Other possible functions you could try to call are setenv or unsetenv.



    Please do really keep in mind that this may not work, or have dire consequences if the process you target does "interesting" things with its environment block. Do test it out on non-critical processes first, but make sure these test processes mirror as close as possible the one you're trying to poke.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited May 23 '17 at 12:40









    Community

    1




    1










    answered May 9 '12 at 10:30









    MatMat

    40k8123128




    40k8123128







    • 3





      Yes I realize it's somewhat of a hack, risky and not guaranteed for reasons you mentioned. (Part of the reason I visit this group is for such non-conventional needs I can't seem to find ordinarily.) In this case setting DISPLAY to junk or empty merely resolves an annoyance and delay(unnecessary frequent screenshots over network,fine if they fail). Since child copies parent, I need only mod the parent env. Many new child &subchild processes are getting spawned and exit quickly in my batch job; those matter. I figured a debugger could do this, thanks--I could wrap that into a shell function.

      – Marcos
      May 9 '12 at 11:02












    • 3





      Yes I realize it's somewhat of a hack, risky and not guaranteed for reasons you mentioned. (Part of the reason I visit this group is for such non-conventional needs I can't seem to find ordinarily.) In this case setting DISPLAY to junk or empty merely resolves an annoyance and delay(unnecessary frequent screenshots over network,fine if they fail). Since child copies parent, I need only mod the parent env. Many new child &subchild processes are getting spawned and exit quickly in my batch job; those matter. I figured a debugger could do this, thanks--I could wrap that into a shell function.

      – Marcos
      May 9 '12 at 11:02







    3




    3





    Yes I realize it's somewhat of a hack, risky and not guaranteed for reasons you mentioned. (Part of the reason I visit this group is for such non-conventional needs I can't seem to find ordinarily.) In this case setting DISPLAY to junk or empty merely resolves an annoyance and delay(unnecessary frequent screenshots over network,fine if they fail). Since child copies parent, I need only mod the parent env. Many new child &subchild processes are getting spawned and exit quickly in my batch job; those matter. I figured a debugger could do this, thanks--I could wrap that into a shell function.

    – Marcos
    May 9 '12 at 11:02





    Yes I realize it's somewhat of a hack, risky and not guaranteed for reasons you mentioned. (Part of the reason I visit this group is for such non-conventional needs I can't seem to find ordinarily.) In this case setting DISPLAY to junk or empty merely resolves an annoyance and delay(unnecessary frequent screenshots over network,fine if they fail). Since child copies parent, I need only mod the parent env. Many new child &subchild processes are getting spawned and exit quickly in my batch job; those matter. I figured a debugger could do this, thanks--I could wrap that into a shell function.

    – Marcos
    May 9 '12 at 11:02













    0














    There is no need to do so if a batch job can read from a file system to retrieve a change. Just run a job with path to a temporary unique directory and pass the same path to the child shell script. Script will lock a file in that directory and write a file with new values near the lock file. A job script time to time will lock the same file, parse and read changes back from the values file. To find out how to make a lock in the unix shell just search for unix shell lock file or bash lock file, there is already exist a plenty solutions for that.



    Benefits from this solution:



    • portable between almost any OS like Windows or Unix

    • no need to write and duplicate complex parsers for each interpreter (unix/windows/etc) to read back values from the file as long as the values file stays simple

    Issues in implementation below:



    • Implementation relies on a file lock in a shell redirection phase (flock in Linux to achieve exclusion effect, in Windows has a builtin exclusion)

    • Each value for a variable is a single line value (not a multiline)

    Implementation is stored here: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools



    The bash implementation:



    set_vars_from_locked_file_pair.sh



    #!/bin/bash

    # Another variant of a configuration file variables read and set script.
    # The script must stay as simple as possible, so for this task it uses these parameters:
    # 1. path where to lock a lock file
    # 2. path where to read a file with variable names (each per line)
    # 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

    # Script can be ONLY included by "source" command.
    if [[ -n "$BASH" && (-z "$BASH_LINENO" || $BASH_LINENO[0] -gt 0) ]]; then

    function set_vars_from_locked_file_pair()

    # the lock file directory must already exist
    if [[ ! -d "$1%[/\]*" ]]; then
    echo "$0: error: lock file directory does not exist: `$1%[/\]*`" >&2
    return 1
    fi

    if [[ ! -f "$2//\//" ]]; then
    echo "$0: error: variable names file does not exist: `$2`" >&2
    return 2
    fi

    if [[ ! -f "$3//\//" ]]; then
    echo "$0: error: variable values file does not exist: `$3`" >&2
    return 3
    fi

    function LocalMain()

    # open file for direct reading by the `read` in the same shell process
    exec 7< "$2"
    exec 8< "$3"

    # cleanup on return
    trap "rm -f "$1" 2> /dev/null; exec 8>&-; exec 7>&-; trap - RETURN" RETURN

    local __VarName
    local __VarValue

    # shared acquire of the lock file
    while :; do
    # lock via redirection to file

    flock -s 9

    # simultaneous iteration over 2 lists in the same time
    while read -r -u 7 __VarName; do
    read -r -u 8 __VarValue
    # drop line returns
    __VarName="$__VarName//[$'rn']"
    __VarValue="$__VarValue//[$'rn']"
    # instead of `declare -gx` because `-g` is introduced only in `bash-4.2-alpha`
    export $__VarName="$__VarValue"
    (( $4:-0 )) && echo "$__VarName=`$__VarValue`"
    done

    break

    # return with previous code
    9> "$1" 2> /dev/null # has exclusive lock been acquired?

    # busy wait
    sleep 0.02
    done


    LocalMain "$1//\//" "$2//\//" "$3//\//" "$4:-0"


    fi


    testlock.sh



    #!/bin/bash


    flock -x 9 2> /dev/null
    read -n1 -r -p "Press any key to continue..."
    echo >&2
    9> "lock"


    The same on Windows (as an example of portability):



    set_vars_from_locked_file_pair.bat



    @echo off

    rem Another variant of a configuration file variables read and set script.
    rem The script must stay as simple as possible, so for this task it uses these parameters:
    rem 1. path where to lock a lock file
    rem 2. path where to read a file with variable names (each per line)
    rem 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

    rem disable alternative variables expansion to avoid `!` character consumption
    setlocal DISABLEDELAYEDEXPANSION

    set "FILE_LOCK_PATH=%~1"
    set "FILE_VAR_NAMES_PATH=%~2"
    set "FILE_VAR_VALUES_PATH=%~3"
    set "PRINT_VARS_SET=%~4"

    set "FILE_LOCK_DIR=%~d1"

    rem the lock file directory must already exist
    if not exist "%FILE_LOCK_DIR%" (
    echo.%~nx0: error: FILE_LOCK_DIR does not exist: "%FILE_LOCK_DIR%"
    exit /b 1
    ) >&2

    if not exist "%FILE_VAR_NAMES_PATH%" (
    echo.%~nx0: error: FILE_VAR_NAMES_PATH does not exist: "%FILE_VAR_NAMES_PATH%"
    exit /b 2
    ) >&2

    if not exist "%FILE_VAR_VALUES_PATH%" (
    echo.%~nx0: error: FILE_VAR_VALUES_PATH does not exist: "%FILE_VAR_VALUES_PATH%"
    exit /b 3
    ) >&2

    rem The endlocal works only in the same call context
    endlocal

    rem exclusive acquire of the lock file
    :REPEAT_LOCK_LOOP

    (
    (
    rem if lock is acquired, then we are in...
    call :MAIN "%%~2" "%%~3" "%%~4"
    call set "LASTERROR=%%ERRORLEVEL%%"

    rem exit with return code from the MAIN
    ) 9> "%~1" && (del /F /Q /A:-D "%~1" & goto EXIT)
    ) 2>nul

    rem Busy wait: with external call significantly reduces CPU consumption while in a waiting state
    pathping localhost -n -q 1 -p 20 >nul 2>&1
    goto REPEAT_LOCK_LOOP

    :EXIT
    exit /b %LASTERROR%

    :MAIN
    rem drop last error
    type nul>nul

    if %~30 NEQ 0 goto SET_WITH_PRINT

    rem trick with simultaneous iteration over 2 lists in the same time
    (
    for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
    set /p "%%i="
    )
    ) < "%~2"

    exit /b

    :SET_WITH_PRINT
    rem trick with simultaneous iteration over 2 lists in the same time
    (
    for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
    set /p "%%i="
    rem to filter out wrong matches of a variable from the `set "%%i"`
    for /f "usebackq eol=# tokens=1,* delims==" %%j in (`set "%%i"`) do if "%%j" == "%%i" echo.%%i=%%k
    )
    ) < "%~2"


    testlock.bat



    @echo off

    (
    pause
    ) 9> ./lock


    To write the files in just make the same way lock in your code.






    share|improve this answer





























      0














      There is no need to do so if a batch job can read from a file system to retrieve a change. Just run a job with path to a temporary unique directory and pass the same path to the child shell script. Script will lock a file in that directory and write a file with new values near the lock file. A job script time to time will lock the same file, parse and read changes back from the values file. To find out how to make a lock in the unix shell just search for unix shell lock file or bash lock file, there is already exist a plenty solutions for that.



      Benefits from this solution:



      • portable between almost any OS like Windows or Unix

      • no need to write and duplicate complex parsers for each interpreter (unix/windows/etc) to read back values from the file as long as the values file stays simple

      Issues in implementation below:



      • Implementation relies on a file lock in a shell redirection phase (flock in Linux to achieve exclusion effect, in Windows has a builtin exclusion)

      • Each value for a variable is a single line value (not a multiline)

      Implementation is stored here: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools



      The bash implementation:



      set_vars_from_locked_file_pair.sh



      #!/bin/bash

      # Another variant of a configuration file variables read and set script.
      # The script must stay as simple as possible, so for this task it uses these parameters:
      # 1. path where to lock a lock file
      # 2. path where to read a file with variable names (each per line)
      # 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

      # Script can be ONLY included by "source" command.
      if [[ -n "$BASH" && (-z "$BASH_LINENO" || $BASH_LINENO[0] -gt 0) ]]; then

      function set_vars_from_locked_file_pair()

      # the lock file directory must already exist
      if [[ ! -d "$1%[/\]*" ]]; then
      echo "$0: error: lock file directory does not exist: `$1%[/\]*`" >&2
      return 1
      fi

      if [[ ! -f "$2//\//" ]]; then
      echo "$0: error: variable names file does not exist: `$2`" >&2
      return 2
      fi

      if [[ ! -f "$3//\//" ]]; then
      echo "$0: error: variable values file does not exist: `$3`" >&2
      return 3
      fi

      function LocalMain()

      # open file for direct reading by the `read` in the same shell process
      exec 7< "$2"
      exec 8< "$3"

      # cleanup on return
      trap "rm -f "$1" 2> /dev/null; exec 8>&-; exec 7>&-; trap - RETURN" RETURN

      local __VarName
      local __VarValue

      # shared acquire of the lock file
      while :; do
      # lock via redirection to file

      flock -s 9

      # simultaneous iteration over 2 lists in the same time
      while read -r -u 7 __VarName; do
      read -r -u 8 __VarValue
      # drop line returns
      __VarName="$__VarName//[$'rn']"
      __VarValue="$__VarValue//[$'rn']"
      # instead of `declare -gx` because `-g` is introduced only in `bash-4.2-alpha`
      export $__VarName="$__VarValue"
      (( $4:-0 )) && echo "$__VarName=`$__VarValue`"
      done

      break

      # return with previous code
      9> "$1" 2> /dev/null # has exclusive lock been acquired?

      # busy wait
      sleep 0.02
      done


      LocalMain "$1//\//" "$2//\//" "$3//\//" "$4:-0"


      fi


      testlock.sh



      #!/bin/bash


      flock -x 9 2> /dev/null
      read -n1 -r -p "Press any key to continue..."
      echo >&2
      9> "lock"


      The same on Windows (as an example of portability):



      set_vars_from_locked_file_pair.bat



      @echo off

      rem Another variant of a configuration file variables read and set script.
      rem The script must stay as simple as possible, so for this task it uses these parameters:
      rem 1. path where to lock a lock file
      rem 2. path where to read a file with variable names (each per line)
      rem 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

      rem disable alternative variables expansion to avoid `!` character consumption
      setlocal DISABLEDELAYEDEXPANSION

      set "FILE_LOCK_PATH=%~1"
      set "FILE_VAR_NAMES_PATH=%~2"
      set "FILE_VAR_VALUES_PATH=%~3"
      set "PRINT_VARS_SET=%~4"

      set "FILE_LOCK_DIR=%~d1"

      rem the lock file directory must already exist
      if not exist "%FILE_LOCK_DIR%" (
      echo.%~nx0: error: FILE_LOCK_DIR does not exist: "%FILE_LOCK_DIR%"
      exit /b 1
      ) >&2

      if not exist "%FILE_VAR_NAMES_PATH%" (
      echo.%~nx0: error: FILE_VAR_NAMES_PATH does not exist: "%FILE_VAR_NAMES_PATH%"
      exit /b 2
      ) >&2

      if not exist "%FILE_VAR_VALUES_PATH%" (
      echo.%~nx0: error: FILE_VAR_VALUES_PATH does not exist: "%FILE_VAR_VALUES_PATH%"
      exit /b 3
      ) >&2

      rem The endlocal works only in the same call context
      endlocal

      rem exclusive acquire of the lock file
      :REPEAT_LOCK_LOOP

      (
      (
      rem if lock is acquired, then we are in...
      call :MAIN "%%~2" "%%~3" "%%~4"
      call set "LASTERROR=%%ERRORLEVEL%%"

      rem exit with return code from the MAIN
      ) 9> "%~1" && (del /F /Q /A:-D "%~1" & goto EXIT)
      ) 2>nul

      rem Busy wait: with external call significantly reduces CPU consumption while in a waiting state
      pathping localhost -n -q 1 -p 20 >nul 2>&1
      goto REPEAT_LOCK_LOOP

      :EXIT
      exit /b %LASTERROR%

      :MAIN
      rem drop last error
      type nul>nul

      if %~30 NEQ 0 goto SET_WITH_PRINT

      rem trick with simultaneous iteration over 2 lists in the same time
      (
      for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
      set /p "%%i="
      )
      ) < "%~2"

      exit /b

      :SET_WITH_PRINT
      rem trick with simultaneous iteration over 2 lists in the same time
      (
      for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
      set /p "%%i="
      rem to filter out wrong matches of a variable from the `set "%%i"`
      for /f "usebackq eol=# tokens=1,* delims==" %%j in (`set "%%i"`) do if "%%j" == "%%i" echo.%%i=%%k
      )
      ) < "%~2"


      testlock.bat



      @echo off

      (
      pause
      ) 9> ./lock


      To write the files in just make the same way lock in your code.






      share|improve this answer



























        0












        0








        0







        There is no need to do so if a batch job can read from a file system to retrieve a change. Just run a job with path to a temporary unique directory and pass the same path to the child shell script. Script will lock a file in that directory and write a file with new values near the lock file. A job script time to time will lock the same file, parse and read changes back from the values file. To find out how to make a lock in the unix shell just search for unix shell lock file or bash lock file, there is already exist a plenty solutions for that.



        Benefits from this solution:



        • portable between almost any OS like Windows or Unix

        • no need to write and duplicate complex parsers for each interpreter (unix/windows/etc) to read back values from the file as long as the values file stays simple

        Issues in implementation below:



        • Implementation relies on a file lock in a shell redirection phase (flock in Linux to achieve exclusion effect, in Windows has a builtin exclusion)

        • Each value for a variable is a single line value (not a multiline)

        Implementation is stored here: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools



        The bash implementation:



        set_vars_from_locked_file_pair.sh



        #!/bin/bash

        # Another variant of a configuration file variables read and set script.
        # The script must stay as simple as possible, so for this task it uses these parameters:
        # 1. path where to lock a lock file
        # 2. path where to read a file with variable names (each per line)
        # 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

        # Script can be ONLY included by "source" command.
        if [[ -n "$BASH" && (-z "$BASH_LINENO" || $BASH_LINENO[0] -gt 0) ]]; then

        function set_vars_from_locked_file_pair()

        # the lock file directory must already exist
        if [[ ! -d "$1%[/\]*" ]]; then
        echo "$0: error: lock file directory does not exist: `$1%[/\]*`" >&2
        return 1
        fi

        if [[ ! -f "$2//\//" ]]; then
        echo "$0: error: variable names file does not exist: `$2`" >&2
        return 2
        fi

        if [[ ! -f "$3//\//" ]]; then
        echo "$0: error: variable values file does not exist: `$3`" >&2
        return 3
        fi

        function LocalMain()

        # open file for direct reading by the `read` in the same shell process
        exec 7< "$2"
        exec 8< "$3"

        # cleanup on return
        trap "rm -f "$1" 2> /dev/null; exec 8>&-; exec 7>&-; trap - RETURN" RETURN

        local __VarName
        local __VarValue

        # shared acquire of the lock file
        while :; do
        # lock via redirection to file

        flock -s 9

        # simultaneous iteration over 2 lists in the same time
        while read -r -u 7 __VarName; do
        read -r -u 8 __VarValue
        # drop line returns
        __VarName="$__VarName//[$'rn']"
        __VarValue="$__VarValue//[$'rn']"
        # instead of `declare -gx` because `-g` is introduced only in `bash-4.2-alpha`
        export $__VarName="$__VarValue"
        (( $4:-0 )) && echo "$__VarName=`$__VarValue`"
        done

        break

        # return with previous code
        9> "$1" 2> /dev/null # has exclusive lock been acquired?

        # busy wait
        sleep 0.02
        done


        LocalMain "$1//\//" "$2//\//" "$3//\//" "$4:-0"


        fi


        testlock.sh



        #!/bin/bash


        flock -x 9 2> /dev/null
        read -n1 -r -p "Press any key to continue..."
        echo >&2
        9> "lock"


        The same on Windows (as an example of portability):



        set_vars_from_locked_file_pair.bat



        @echo off

        rem Another variant of a configuration file variables read and set script.
        rem The script must stay as simple as possible, so for this task it uses these parameters:
        rem 1. path where to lock a lock file
        rem 2. path where to read a file with variable names (each per line)
        rem 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

        rem disable alternative variables expansion to avoid `!` character consumption
        setlocal DISABLEDELAYEDEXPANSION

        set "FILE_LOCK_PATH=%~1"
        set "FILE_VAR_NAMES_PATH=%~2"
        set "FILE_VAR_VALUES_PATH=%~3"
        set "PRINT_VARS_SET=%~4"

        set "FILE_LOCK_DIR=%~d1"

        rem the lock file directory must already exist
        if not exist "%FILE_LOCK_DIR%" (
        echo.%~nx0: error: FILE_LOCK_DIR does not exist: "%FILE_LOCK_DIR%"
        exit /b 1
        ) >&2

        if not exist "%FILE_VAR_NAMES_PATH%" (
        echo.%~nx0: error: FILE_VAR_NAMES_PATH does not exist: "%FILE_VAR_NAMES_PATH%"
        exit /b 2
        ) >&2

        if not exist "%FILE_VAR_VALUES_PATH%" (
        echo.%~nx0: error: FILE_VAR_VALUES_PATH does not exist: "%FILE_VAR_VALUES_PATH%"
        exit /b 3
        ) >&2

        rem The endlocal works only in the same call context
        endlocal

        rem exclusive acquire of the lock file
        :REPEAT_LOCK_LOOP

        (
        (
        rem if lock is acquired, then we are in...
        call :MAIN "%%~2" "%%~3" "%%~4"
        call set "LASTERROR=%%ERRORLEVEL%%"

        rem exit with return code from the MAIN
        ) 9> "%~1" && (del /F /Q /A:-D "%~1" & goto EXIT)
        ) 2>nul

        rem Busy wait: with external call significantly reduces CPU consumption while in a waiting state
        pathping localhost -n -q 1 -p 20 >nul 2>&1
        goto REPEAT_LOCK_LOOP

        :EXIT
        exit /b %LASTERROR%

        :MAIN
        rem drop last error
        type nul>nul

        if %~30 NEQ 0 goto SET_WITH_PRINT

        rem trick with simultaneous iteration over 2 lists in the same time
        (
        for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
        set /p "%%i="
        )
        ) < "%~2"

        exit /b

        :SET_WITH_PRINT
        rem trick with simultaneous iteration over 2 lists in the same time
        (
        for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
        set /p "%%i="
        rem to filter out wrong matches of a variable from the `set "%%i"`
        for /f "usebackq eol=# tokens=1,* delims==" %%j in (`set "%%i"`) do if "%%j" == "%%i" echo.%%i=%%k
        )
        ) < "%~2"


        testlock.bat



        @echo off

        (
        pause
        ) 9> ./lock


        To write the files in just make the same way lock in your code.






        share|improve this answer















        There is no need to do so if a batch job can read from a file system to retrieve a change. Just run a job with path to a temporary unique directory and pass the same path to the child shell script. Script will lock a file in that directory and write a file with new values near the lock file. A job script time to time will lock the same file, parse and read changes back from the values file. To find out how to make a lock in the unix shell just search for unix shell lock file or bash lock file, there is already exist a plenty solutions for that.



        Benefits from this solution:



        • portable between almost any OS like Windows or Unix

        • no need to write and duplicate complex parsers for each interpreter (unix/windows/etc) to read back values from the file as long as the values file stays simple

        Issues in implementation below:



        • Implementation relies on a file lock in a shell redirection phase (flock in Linux to achieve exclusion effect, in Windows has a builtin exclusion)

        • Each value for a variable is a single line value (not a multiline)

        Implementation is stored here: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools



        The bash implementation:



        set_vars_from_locked_file_pair.sh



        #!/bin/bash

        # Another variant of a configuration file variables read and set script.
        # The script must stay as simple as possible, so for this task it uses these parameters:
        # 1. path where to lock a lock file
        # 2. path where to read a file with variable names (each per line)
        # 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

        # Script can be ONLY included by "source" command.
        if [[ -n "$BASH" && (-z "$BASH_LINENO" || $BASH_LINENO[0] -gt 0) ]]; then

        function set_vars_from_locked_file_pair()

        # the lock file directory must already exist
        if [[ ! -d "$1%[/\]*" ]]; then
        echo "$0: error: lock file directory does not exist: `$1%[/\]*`" >&2
        return 1
        fi

        if [[ ! -f "$2//\//" ]]; then
        echo "$0: error: variable names file does not exist: `$2`" >&2
        return 2
        fi

        if [[ ! -f "$3//\//" ]]; then
        echo "$0: error: variable values file does not exist: `$3`" >&2
        return 3
        fi

        function LocalMain()

        # open file for direct reading by the `read` in the same shell process
        exec 7< "$2"
        exec 8< "$3"

        # cleanup on return
        trap "rm -f "$1" 2> /dev/null; exec 8>&-; exec 7>&-; trap - RETURN" RETURN

        local __VarName
        local __VarValue

        # shared acquire of the lock file
        while :; do
        # lock via redirection to file

        flock -s 9

        # simultaneous iteration over 2 lists in the same time
        while read -r -u 7 __VarName; do
        read -r -u 8 __VarValue
        # drop line returns
        __VarName="$__VarName//[$'rn']"
        __VarValue="$__VarValue//[$'rn']"
        # instead of `declare -gx` because `-g` is introduced only in `bash-4.2-alpha`
        export $__VarName="$__VarValue"
        (( $4:-0 )) && echo "$__VarName=`$__VarValue`"
        done

        break

        # return with previous code
        9> "$1" 2> /dev/null # has exclusive lock been acquired?

        # busy wait
        sleep 0.02
        done


        LocalMain "$1//\//" "$2//\//" "$3//\//" "$4:-0"


        fi


        testlock.sh



        #!/bin/bash


        flock -x 9 2> /dev/null
        read -n1 -r -p "Press any key to continue..."
        echo >&2
        9> "lock"


        The same on Windows (as an example of portability):



        set_vars_from_locked_file_pair.bat



        @echo off

        rem Another variant of a configuration file variables read and set script.
        rem The script must stay as simple as possible, so for this task it uses these parameters:
        rem 1. path where to lock a lock file
        rem 2. path where to read a file with variable names (each per line)
        rem 3. path where to read a file with variable values (each per line, must be the same quantity of lines with the variable names file)

        rem disable alternative variables expansion to avoid `!` character consumption
        setlocal DISABLEDELAYEDEXPANSION

        set "FILE_LOCK_PATH=%~1"
        set "FILE_VAR_NAMES_PATH=%~2"
        set "FILE_VAR_VALUES_PATH=%~3"
        set "PRINT_VARS_SET=%~4"

        set "FILE_LOCK_DIR=%~d1"

        rem the lock file directory must already exist
        if not exist "%FILE_LOCK_DIR%" (
        echo.%~nx0: error: FILE_LOCK_DIR does not exist: "%FILE_LOCK_DIR%"
        exit /b 1
        ) >&2

        if not exist "%FILE_VAR_NAMES_PATH%" (
        echo.%~nx0: error: FILE_VAR_NAMES_PATH does not exist: "%FILE_VAR_NAMES_PATH%"
        exit /b 2
        ) >&2

        if not exist "%FILE_VAR_VALUES_PATH%" (
        echo.%~nx0: error: FILE_VAR_VALUES_PATH does not exist: "%FILE_VAR_VALUES_PATH%"
        exit /b 3
        ) >&2

        rem The endlocal works only in the same call context
        endlocal

        rem exclusive acquire of the lock file
        :REPEAT_LOCK_LOOP

        (
        (
        rem if lock is acquired, then we are in...
        call :MAIN "%%~2" "%%~3" "%%~4"
        call set "LASTERROR=%%ERRORLEVEL%%"

        rem exit with return code from the MAIN
        ) 9> "%~1" && (del /F /Q /A:-D "%~1" & goto EXIT)
        ) 2>nul

        rem Busy wait: with external call significantly reduces CPU consumption while in a waiting state
        pathping localhost -n -q 1 -p 20 >nul 2>&1
        goto REPEAT_LOCK_LOOP

        :EXIT
        exit /b %LASTERROR%

        :MAIN
        rem drop last error
        type nul>nul

        if %~30 NEQ 0 goto SET_WITH_PRINT

        rem trick with simultaneous iteration over 2 lists in the same time
        (
        for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
        set /p "%%i="
        )
        ) < "%~2"

        exit /b

        :SET_WITH_PRINT
        rem trick with simultaneous iteration over 2 lists in the same time
        (
        for /f "usebackq eol=# tokens=* delims=" %%i in ("%~1") do (
        set /p "%%i="
        rem to filter out wrong matches of a variable from the `set "%%i"`
        for /f "usebackq eol=# tokens=1,* delims==" %%j in (`set "%%i"`) do if "%%j" == "%%i" echo.%%i=%%k
        )
        ) < "%~2"


        testlock.bat



        @echo off

        (
        pause
        ) 9> ./lock


        To write the files in just make the same way lock in your code.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 8 at 13:30

























        answered Feb 21 at 17:05









        AndryAndry

        1012




        1012



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Unix & Linux Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f38205%2fchange-environment-of-a-running-process%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            getting Checkpoint VPN SSL Network Extender working in the command lineHow to connect to CheckPoint VPN on Ubuntu 18.04LTS?Will the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayVPN SSL Network Extender in FirefoxLinux Checkpoint SNX tool configuration issuesCheck Point - Connect under Linux - snx + OTPSNX VPN Ububuntu 18.XXUsing Checkpoint VPN SSL Network Extender CLI with certificateVPN with network manager (nm-applet) is not workingWill the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayImport VPN config files to NetworkManager from command lineTrouble connecting to VPN using network-manager, while command line worksStart a VPN connection with PPTP protocol on command linestarting a docker service daemon breaks the vpn networkCan't connect to vpn with Network-managerVPN SSL Network Extender in FirefoxUsing Checkpoint VPN SSL Network Extender CLI with certificate

            NetworkManager fails with “Could not find source connection”Trouble connecting to VPN using network-manager, while command line worksHow can I be notified about state changes to a VPN adapterBacktrack 5 R3 - Refuses to connect to VPNFeed all traffic through OpenVPN for a specific network namespace onlyRun daemon on startup in Debian once openvpn connection establishedpfsense tcp connection between openvpn and lan is brokenInternet connection problem with web browsers onlyWhy does NetworkManager explicitly support tun/tap devices?Browser issues with VPNTwo IP addresses assigned to the same network card - OpenVPN issues?Cannot connect to WiFi with nmcli, although secrets are provided

            대한민국 목차 국명 지리 역사 정치 국방 경제 사회 문화 국제 순위 관련 항목 각주 외부 링크 둘러보기 메뉴북위 37° 34′ 08″ 동경 126° 58′ 36″ / 북위 37.568889° 동경 126.976667°  / 37.568889; 126.976667ehThe Korean Repository문단을 편집문단을 편집추가해Clarkson PLC 사Report for Selected Countries and Subjects-Korea“Human Development Index and its components: P.198”“http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EA%B5%AD%EA%B8%B0%EB%B2%95”"한국은 국제법상 한반도 유일 합법정부 아니다" - 오마이뉴스 모바일Report for Selected Countries and Subjects: South Korea격동의 역사와 함께한 조선일보 90년 : 조선일보 인수해 혁신시킨 신석우, 임시정부 때는 '대한민국' 국호(國號) 정해《우리가 몰랐던 우리 역사: 나라 이름의 비밀을 찾아가는 역사 여행》“남북 공식호칭 ‘남한’‘북한’으로 쓴다”“Corea 대 Korea, 누가 이긴 거야?”국내기후자료 - 한국[김대중 前 대통령 서거] 과감한 구조개혁 'DJ노믹스'로 최단기간 환란극복 :: 네이버 뉴스“이라크 "韓-쿠르드 유전개발 MOU 승인 안해"(종합)”“해외 우리국민 추방사례 43%가 일본”차기전차 K2'흑표'의 세계 최고 전력 분석, 쿠키뉴스 엄기영, 2007-03-02두산인프라, 헬기잡는 장갑차 'K21'...내년부터 공급, 고뉴스 이대준, 2008-10-30과거 내용 찾기mk 뉴스 - 구매력 기준으로 보면 한국 1인당 소득 3만弗과거 내용 찾기"The N-11: More Than an Acronym"Archived조선일보 최우석, 2008-11-01Global 500 2008: Countries - South Korea“몇년째 '시한폭탄'... 가계부채, 올해는 터질까”가구당 부채 5000만원 처음 넘어서“‘빚’으로 내몰리는 사회.. 위기의 가계대출”“[경제365] 공공부문 부채 급증…800조 육박”“"소득 양극화 다소 완화...불평등은 여전"”“공정사회·공생발전 한참 멀었네”iSuppli,08年2QのDRAMシェア・ランキングを発表(08/8/11)South Korea dominates shipbuilding industry | Stock Market News & Stocks to Watch from StraightStocks한국 자동차 생산, 3년 연속 세계 5위자동차수출 '현대-삼성 웃고 기아-대우-쌍용은 울고' 과거 내용 찾기동반성장위 창립 1주년 맞아Archived"중기적합 3개업종 합의 무시한 채 선정"李대통령, 사업 무분별 확장 소상공인 생계 위협 질타삼성-LG, 서민업종인 빵·분식사업 잇따라 철수상생은 뒷전…SSM ‘몸집 불리기’ 혈안Archived“경부고속도에 '아시안하이웨이' 표지판”'철의 실크로드' 앞서 '말(言)의 실크로드'부터, 프레시안 정창현, 2008-10-01“'서울 지하철은 안전한가?'”“서울시 “올해 안에 모든 지하철역 스크린도어 설치””“부산지하철 1,2호선 승강장 안전펜스 설치 완료”“전교조, 정부 노조 통계서 처음 빠져”“[Weekly BIZ] 도요타 '제로 이사회'가 리콜 사태 불러들였다”“S Korea slams high tuition costs”““정치가 여론 양극화 부채질… 합리주의 절실””“〈"`촛불집회'는 민주주의의 질적 변화 상징"〉”““촛불집회가 민주주의 왜곡 초래””“국민 65%, "한국 노사관계 대립적"”“한국 국가경쟁력 27위‥노사관계 '꼴찌'”“제대로 형성되지 않은 대한민국 이념지형”“[신년기획-갈등의 시대] 갈등지수 OECD 4위…사회적 손실 GDP 27% 무려 300조”“2012 총선-대선의 키워드는 '국민과 소통'”“한국 삶의 질 27위, 2000년과 2008년 연속 하위권 머물러”“[해피 코리아] 행복점수 68점…해외 평가선 '낙제점'”“한국 어린이·청소년 행복지수 3년 연속 OECD ‘꼴찌’”“한국 이혼율 OECD중 8위”“[통계청] 한국 이혼율 OECD 4위”“오피니언 [이렇게 생각한다] `부부의 날` 에 돌아본 이혼율 1위 한국”“Suicide Rates by Country, Global Health Observatory Data Repository.”“1. 또 다른 차별”“오피니언 [편집자에게] '왕따'와 '패거리 정치' 심리는 닮은꼴”“[미래한국리포트] 무한경쟁에 빠진 대한민국”“대학생 98% "외모가 경쟁력이라는 말 동의"”“특급호텔 웨딩·200만원대 유모차… "남보다 더…" 호화病, 고질병 됐다”“[스트레스 공화국] ① 경쟁사회, 스트레스 쌓인다”““매일 30여명 자살 한국, 의사보다 무속인에…””“"자살 부르는 '우울증', 환자 중 85% 치료 안 받아"”“정신병원을 가다”“대한민국도 ‘묻지마 범죄’,안전지대 아니다”“유엔 "학생 '성적 지향'에 따른 차별 금지하라"”“유엔아동권리위원회 보고서 및 번역본 원문”“고졸 성공스토리 담은 '제빵왕 김탁구' 드라마 나온다”“‘빛 좋은 개살구’ 고졸 취업…실습 대신 착취”원본 문서“정신건강, 사회적 편견부터 고쳐드립니다”‘소통’과 ‘행복’에 목 마른 사회가 잠들어 있던 ‘심리학’ 깨웠다“[포토] 사유리-곽금주 교수의 유쾌한 심리상담”“"올해 한국인 평균 영화관람횟수 세계 1위"(종합)”“[게임연중기획] 게임은 문화다-여가활동 1순위 게임”“영화속 ‘영어 지상주의’ …“왠지 씁쓸한데””“2월 `신문 부수 인증기관` 지정..방송법 후속작업”“무료신문 성장동력 ‘차별성’과 ‘갈등해소’”대한민국 국회 법률지식정보시스템"Pew Research Center's Religion & Public Life Project: South Korea"“amp;vwcd=MT_ZTITLE&path=인구·가구%20>%20인구총조사%20>%20인구부문%20>%20 총조사인구(2005)%20>%20전수부문&oper_YN=Y&item=&keyword=종교별%20인구& amp;lang_mode=kor&list_id= 2005년 통계청 인구 총조사”원본 문서“한국인이 좋아하는 취미와 운동 (2004-2009)”“한국인이 좋아하는 취미와 운동 (2004-2014)”Archived“한국, `부분적 언론자유국' 강등〈프리덤하우스〉”“국경없는기자회 "한국, 인터넷감시 대상국"”“한국, 조선산업 1위 유지(S. Korea Stays Top Shipbuilding Nation) RZD-Partner Portal”원본 문서“한국, 4년 만에 ‘선박건조 1위’”“옛 마산시,인터넷속도 세계 1위”“"한국 초고속 인터넷망 세계1위"”“인터넷·휴대폰 요금, 외국보다 훨씬 비싸”“한국 관세행정 6년 연속 세계 '1위'”“한국 교통사고 사망자 수 OECD 회원국 중 2위”“결핵 후진국' 한국, 환자가 급증한 이유는”“수술은 신중해야… 자칫하면 생명 위협”대한민국분류대한민국의 지도대한민국 정부대표 다국어포털대한민국 전자정부대한민국 국회한국방송공사about korea and information korea브리태니커 백과사전(한국편)론리플래닛의 정보(한국편)CIA의 세계 정보(한국편)마리암 부디아 (Mariam Budia),『한국: 하늘이 내린 한 폭의 그림』, 서울: 트랜스라틴 19호 (2012년 3월)대한민국ehehehehehehehehehehehehehehWorldCat132441370n791268020000 0001 2308 81034078029-6026373548cb11863345f(데이터)00573706ge128495