AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-56202

Tavian Barnes's questions

Martin Hope
Tavian Barnes
Asked: 2024-06-12 04:54:06 +0800 CST

setitimer() 禁用计时器后,是否有可能发送 SIGALRM?

  • 8

我有一些这样的代码,在 CI 上失败了一次,在本地失败了一次,但我无法可靠地重现它。代码如下:

#include <stddef.h>
#include <signal.h>
#include <sys/time.h>
#include <time.h>

int main(void) {
    // Ignore SIGALRM
    signal(SIGALRM, SIG_IGN);

    // Set a timer for every 100us
    struct itimerval ival = {0};
    ival.it_value.tv_usec = 100;
    ival.it_interval.tv_usec = 100;
    setitimer(ITIMER_REAL, &ival, NULL);

    // Busy-wait 1s
    time_t start = time(NULL);
    while (time(NULL) <= start);

    // Disable the timer
    ival.it_value.tv_usec = 0;
    setitimer(ITIMER_REAL, &ival, NULL);

    // Restore the default SIGALRM disposition
    signal(SIGALRM, SIG_DFL);

    // Busy-wait 1s
    start = time(NULL);
    while (time(NULL) <= start);

    return 0;
}

我观察到的故障是由于SIGALRM(shell 显示“闹钟”)导致进程终止。SIGALRM最终返回后,是否有可能从计时器传递一个setitimer()?

POSIX 措辞setitimer()对于信号之间的顺序以及setitimer()禁用计时器不是很清楚。

我曾在 Linux 上观察到一次此崩溃,在 macOS 上观察到一次。

c
  • 2 个回答
  • 93 Views
Martin Hope
Tavian Barnes
Asked: 2023-06-23 04:56:30 +0800 CST

NFS 挂载混合了 ctime 和 mtime

  • 8

我有一个从 Linux 服务器到 FreeBSD 客户端的 NFS 挂载。如果我用来touch在 FreeBSD 客户端上设置文件的 atime 和 mtime,

tavianator@muon $ touch -at "199112140000" ./foo
tavianator@muon $ touch -mt "199112150000" ./foo

然后打印统计时间,

tavianator@muon $ stat -f $'Access: %Sa\nModify: %Sm\nChange: %Sc\n Birth: %SB' ./foo
Access: Dec 14 00:00:00 1991
Modify: Jun 22 16:44:08 2023
Change: Dec 15 00:00:00 1991
 Birth: Jun 22 16:45:56 2023

ctime 和 mtime 交换了!然而,从Linux服务器上的观点是正确的:

tavianator@tachyon $ stat /srv/nfs/freebsd/usr/home/tavianator/foo
  File: /srv/nfs/freebsd/usr/home/tavianator/foo
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 0,33    Inode: 54691999    Links: 1
Access: (0640/-rw-r-----)  Uid: ( 1000/tavianator)   Gid: ( 1000/tavianator)
Access: 1991-12-14 00:00:00.000000000 -0500
Modify: 1991-12-15 00:00:00.000000000 -0500
Change: 2023-06-22 16:45:56.731038486 -0400
 Birth: 2023-06-22 16:44:08.075496568 -0400

知道什么可能导致此问题,或者如何解决它?更多可能有用的信息:

root@tachyon ~ # uname -a
Linux tachyon 6.3.8-arch1-1 #1 SMP PREEMPT_DYNAMIC Wed, 14 Jun 2023 20:10:31 +0000 x86_64 GNU/Linux
root@tachyon ~ # findmnt -T /srv/nfs/freebsd/usr/home/tavianator 
TARGET
  SOURCE                      FSTYPE OPTIONS
/ /dev/mapper/cryptslash1[/@] btrfs  rw,relatime,ssd,discard=async,space_cache=v2,subvolid=261,subvol=/@
root@tachyon ~ # exportfs -v
/srv/nfs        100.101.179.2/32(sync,wdelay,hide,no_subtree_check,fsid=0,sec=sys,rw,secure,no_root_squash,no_all_squash)
/srv/nfs        100.114.24.115/32(sync,wdelay,hide,no_subtree_check,fsid=0,sec=sys,rw,secure,no_root_squash,no_all_squash)
/srv/nfs/freebsd
                100.101.179.2/32(sync,wdelay,nohide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/srv/nfs/freebsd
                100.114.24.115/32(sync,wdelay,nohide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
tavianator@muon $ uname -a
FreeBSD muon 13.2-RELEASE FreeBSD 13.2-RELEASE releng/13.2-n254617-525ecfdad597 GENERIC amd64
tavianator@muon $ mount | grep nfs,
100.107.249.85:/freebsd/usr/home/tavianator on /usr/home/tavianator (nfs, nfsv4acls)
linux
  • 1 个回答
  • 53 Views
Martin Hope
Tavian Barnes
Asked: 2022-06-01 08:50:32 +0800 CST

find -exec /no/such/file {} \; 是否符合 POSIX?退出错误?

  • 2

我是find尝试与 POSIX(以及许多流行的扩展)兼容的替代品的作者。最近我注意到我的实用程序的行为与其他实现之间存在差异find,我想知道 POSIX 是否允许我的行为,或者我是否需要更改它。

$ find . -exec /no/such/file {} \;
find: ‘/no/such/file’: No such file or directory
$ echo $?
0
$ bfs . -exec /no/such/file {} \;
bfs: error: .: -exec /no/such/file: No such file or directory.
$ echo $?
1

在这种情况下,至少 GNU、busybox 和 FreeBSD find 都具有退出状态 0。execv()我的实现将错误从ed 子级传播fork()到父级,而其他实现似乎直接从子级打印错误而不告诉父级。

我之所以问这个问题,而不是仅仅改变行为以匹配其他问题,是因为使用posix_spawn(). 的实现posix_spawn()被允许将execv()错误传播到errno父级中,例如glibc,musl两者都这样做。似乎无法判断错误是发生在 之前还是之后fork(),并且可能来自fork()(例如ENOMEM)之前的错误应该导致非零退出状态。

我已经阅读了POSIX 规范find,但这里的细节很简单。但是,我听说其他地方记录了其他可能相关的规则。例如,我听说如果一个实用程序打印到标准错误,它也必须以非零退出代码退出,这似乎暗示其他finds 不兼容。但我不确定那个措辞在哪里,或者它是否真的存在。

find posix
  • 1 个回答
  • 87 Views
Martin Hope
Tavian Barnes
Asked: 2018-12-19 20:32:48 +0800 CST

为什么 POSIX.1e 被撤回?

  • 12

提议的 POSIX.1e 标准定义了一些东西,比如被广泛支持的 ACL。但该提案本身被撤回。怎么来的?我在网上找到的唯一理由是来自http://wt.tuxomania.net/topics/1999_06_Posix_1e/的这句话:

从今天(2014 年 7 月)的角度来看,为什么要放弃 Posix.1e 很难理解。Solaris、Irix、Linux 和可能的其他 Unices 似乎都认可这个标准。另一方面,FreeBSD 项目发现了相反的论点,并且默认情况下没有集成功能(“细粒度权限”)。

另一方面,Jörg Schilling 在这个网站上说这个(文件系统 ACL 中 `mask` 的确切目的是什么?)

顺便说一句:ACL 的 POSIX-1003.1 草案已于 1997 年被参考实现(ag Solaris)撤回,因为事实证明客户想要一种更强大的方法,该方法后来被标准化为 NVSv4 ACL。

有没有更详细的说明发生了什么?

posix history
  • 1 个回答
  • 862 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve