我需要一些简单的东西date
,但是自1970年以来的几秒钟而不是当前的日期,小时,分钟和秒.
date
似乎没有提供这种选择.有一个简单的方法吗?
我正在写一个C Shell程序,它正在做su
或者sudo
或者ssh
.他们都希望他们的密码在控制台输入(TTY)而不是stdin或命令行.
有人知道解决方案吗?
设置无密码sudo
不是一种选择.
期望可能是一个选择,但它在我的精简系统中不存在.
我需要/etc/sudoers
从脚本编辑以添加/删除白名单中的内容.
假设我有一个可以在普通文件上运行的命令,我该如何应用它/etc/sudoers
?
我可以复制和修改它,然后visudo
用修改过的副本替换原件吗?通过提供我自己的脚本$EDITOR
?
或者我可以使用相同的锁和cp
?
问题更多的是关于潜在的问题,而不仅仅是找到有用的东西.
我正在实现一个库来运行命令.Linux上的库是C语言.
它目前执行popen()调用来运行命令并获取输出.问题是该命令继承了所有当前打开的文件处理程序.
如果我做了一个fork/exec,我可以明确地关闭孩子的处理程序.但这意味着重新实现popen().
我可以在所有处理程序上设置close-on-exec而不必逐个循环它们吗?
我可以将close-on-exec设置为进程的默认值吗?
谢谢!
这是使用文件系统创建锁的标准方法.例如,visudo使用它:
[ -f ".lock" ] && exit 1
touch .lock
# do something
rm .lock
Run Code Online (Sandbox Code Playgroud)
1)我很困惑,因为有竞争条件,但Linux使用它
2)有没有更好的方法来锁定shell中的文件?
3)或者我必须使用目录吗?
找到解决方案:man lockfile.
我需要比较shell中的字符串:
var1="mtu eth0"
if [ "$var1" == "mtu *" ]
then
# do something
fi
Run Code Online (Sandbox Code Playgroud)
但显然"*"在壳牌中不起作用.有办法吗?
我有一个char* p
,指向一个\0
终止字符串.如何string
以异常安全的方式从中创建C++ ?
这是一个不安全的版本:
string foo()
{
char *p = get_string();
string str( p );
free( p );
return str;
}
Run Code Online (Sandbox Code Playgroud)
一个明显的解决方案是尝试捕获 - 任何更简单的方法?
我有一个Bourne Shell脚本,其中包含多个函数,并允许以下列方式调用:
func_name()
将使用param1和param2调用func_name()内部.
我想创建一个"帮助"功能,只列出所有可用的功能,即使没有参数.
问题:如何从脚本内部获取脚本中所有函数名称的列表?
我想避免解析它并寻找功能模式.太容易出错了.
谢谢,亚历克斯
更新:代码.想要我的help()函数就像main() - 添加到代码中的函数会自动添加到帮助中.
my.sh <func_name> <param1> <param2>
Run Code Online (Sandbox Code Playgroud) 我需要在锁定/解锁上下文之外的用户空间中调用do_futex()函数.即,我不需要互斥锁,但内核的确切语义调用do_futex.
它似乎应该在用户空间中可用,因为其意图是最小化系统调用的数量,但我无法与它链接.
还是有一个系统调用?
更新:
我目前正在使用系统调用(__ NR_futex,...)来运行do_futex().但
有一个连贯的包装?
Perl的system()启动一个进程,但打破了父/子关系?
test.pl:
use POSIX;
system("./test.sh &");
my $pid = `ps -C test.sh -o pid=`;
print "pid: -$pid-\n";
waitpid($pid, 0);
Run Code Online (Sandbox Code Playgroud)
test.sh:
while true
do
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
当我运行test.pl时,它会找到并打印一个正确的test.sh. 但是waitpid()返回-1并且test.pl退出.test.pl存在后,test.sh仍在运行.
看起来test.sh不是test.pl的子代,它会破坏waitpid().为什么会发生这种情况以及如何使system()表现出来?这是因为Perl会自动清除孩子吗?如果是,我该如何解决明确等待儿童的一般任务?
更新:
下面的答案建议使用fork/exec.最初的问题是:
从Perl脚本,运行启动服务的命令行实用程序.该实用程序退出但服务仍然存在.
过了一段时间,找到服务的pid并等待它.
虽然它解决了这个问题,但fork/exec并没有解决这个问题.
我需要运行Linux CLI命令并从C获取其stdout输出.
我可以使用pipe()创建一个管道,然后使用fork/exec,在调用exec()之前将child的stdout描述符重定向到管道,并从父管道中读取.另外,我需要等孩子.
是否有一个简单的调用fork + redirect + exec + wait,就像system()执行fork + exec + wait一样,只有system()不执行重定向.
有popen(),它执行fork + redirect + exec,但是没有等待,所以我无法获得退出状态.
我需要找到我正在运行的Perl脚本的完整路径,即
对于〜/ dir/my.pl我需要它是"/home/user/dir/my.pl".该$0
给我"〜/ DIR/my.pl".
对于./my.pl我仍然需要"/home/user/dir/my.pl"
等等谢谢!
P1和P2是集群中的进程或节点.f1和f2是他们的旗帜.假设强大的内存模型,并且两个进程可以在任何时刻重新启动,并且重新启动进程会清除它的标志,这是我提出的算法,但是还没有打破,但这让我感到困扰,因为它没有在理论上得到证实和与彼得森相比看起来太简单了.
P1 start:
set f1
if f2 set then clear f1, wait some, goto start
else enter critical section
do whatever
clear f1
P2 start:
set f2
if f1 set then clear f2, wait some, goto start
else enter critical section
do whatever
clear f2
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到流量吗?除了可能是其中一个进程可能通过快速重新进入该部分而使另一个进程挨饿?